Лучшее решение для Django Composite первичного ключа из внешних ключейPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Лучшее решение для Django Composite первичного ключа из внешних ключей

Сообщение Anonymous »

Я хочу удовлетворить эту связь в базе данных Django SQLite (ER-диаграмма). Я пробовал использовать решения unique_together и models.UniqueConstraint, которые я видел.
myapp/models.py

Код: Выделить всё

class User(models.Model):
user_id = models.AutoField(primary_key=True, null=False)

class Article(models.Model):
article_id = models.AutoField(primary_key=True)

class ArticleEditor(models.Model):
class Meta:
# RECOMMENDED
models.UniqueConstraint(fields=['article_id', 'editor_id'], name="article_editor_id",)
# DEPRECATED
unique_together = (('article_id', 'editor_id'),)

article_id = models.ForeignKey(
Article,
on_delete=models.CASCADE,
)
editor_id = models.ForeignKey(
User,
on_delete=models.PROTECT,
)

В обоих случаях, когда я пытаюсь сохранить объект ArticleEdiotor через консоль Python, я получаю следующую ошибку:

Код: Выделить всё

>>> from myapp.models import User, Article, ArticleEditor
>>> a = Article.objects.get(article_id=2)
>>> u = User.objects.get(user_id=1)
>>> ae = ArticleEditor(a.article_id, u.user_id)
>>> ae.save()
Traceback (most recent call last):
...
django.db.utils.OperationalError: no such table: myapp_articleeditor

Однако я проверил команду sqlmigrate на наличие миграции, и она выполнила CREATE TABLE "myapp_articleeditor"; но он по-прежнему создает целое число "id" NOT NULL PRIMARY KEY AUTOINCREMENT, которое мне не нужно, как хотелось бы для моего составного ключа (

Код: Выделить всё

article_editor_id
) в качестве первичного ключа. Как мне этого добиться?
И действительно ли это лучший способ создать связь «многие ко многим» с промежуточной таблицей, как показано на диаграмме, или есть лучший способ? решение?

Подробнее здесь: https://stackoverflow.com/questions/654 ... reign-keys
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»