Django: «поле указывает отношение« многие ко многим »через модель, которая не была установлена» - PullRequest
0 голосов
/ 10 января 2020

После разбиения файла models.py, содержащего 3 модели, на 3 разных файла, я получил следующую ошибку при запуске make migrations или migrate:

(models.E022) .resolve_through_model в 0x105d74e18> содержит ленивую ссылку на products.itemsbyarticle, но приложение 'products' не предоставляет модель 'itemsbyarticle'. products.Article.items: (fields.E331) Поле указывает отношение «многие ко многим» через модель «ItemsByArticle», которая не была установлена.

Структура проекта: my_project> products> models > [article.py | item.py | items_by_article.py]

article.py

class Article(models.Model):

    items = models.ManyToManyField('products.Item', through='ItemsByArticle', blank=True,
                                   verbose_name=_('items'))

ПРИМЕЧАНИЕ. Вместо этого я попытался through='products.ItemsByArticle', та же ошибка.

item.py

class Item(models.Model):
    # ...

items_by_article.py

class ItemsByArticle(models.Model):
    class Meta:
        unique_together = ('article', 'item')

    article = models.ForeignKey('products.Article',
                                on_delete=models.CASCADE)
    item = models.ForeignKey('products.Item',
                             on_delete=models.CASCADE,
                             verbose_name=_('item'))

Любопытно, когда запускаются юнит-тесты (а Django создает новая база данных), ошибки нет.

1 Ответ

0 голосов
/ 10 января 2020

У вас есть __init__.py файл в my_project/products/models/, который импортирует все модели модуля ?

from .article import Article
from .item import Item
from .items_by_article import ItemsByArticle
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...