Django Error admin.E202 'stamm.Workplan' has no ForeignKey to 'enquiry.Costing', Inline-Model in a Many-To-Many Relationship
Я борюсь со следующей проблемой:
Я создал два приложения, "stamm" и "enquiry". В первом приложении "stamm" у меня есть модель Workplan. Во втором приложении "запрос" у меня есть модель "Калькуляция". Я использую M2M отношения через сквозную модель под названием "CostingWorkplan" под моей моделью Costing. Затем я хочу добавить TabularInline из Workplan в CostingAdmin. Когда я делаю это, я получаю ошибку
<class 'enquiry.admin.WorkplanInline'>: (admin.E202) 'stamm.Workplan' не имеет ForeignKey к 'enquiry.Costing'..
Я проверил пару потоков с подобной Проблемой, но не могу избавиться от нее. Я что-то упустил из виду?
Вот мой код Python:
# stamm.models.py
class Workplan(model.Model):
some_fields = ...
# enquiry.models.py
from stamm.models import Workplan
class Costing(model.Model):
some_fields = ...
costing_workplan = models.ManyToManyField(Workplan, through='CostingWorkplan')
class CostingWorkplan(models.Model):
workplan = models.ForeignKey(Workplan, on_delete=models.RESTRICT)
costing = models.ForeignKey(Costing, on_delete=models.RESTRICT)
# enquiry.admin.py
from .models import Costing
from stamm.models import Workplan
class WorkplanInline(admin.TabularInline):
model = Workplan
@admin.register(Costing)
class CostingAdmin(admin.ModelAdmin):
inlines = (WorkplanInline, )
Вчера, после нескольких часов исследований, чтения и тестирования, я нашел ответ.
Я перечитал некоторые важные детали в документации по Inline-моделям, работающим с моделями "многие ко многим".
Важным ключом является замена
class WorkplanInline(admin.TabularInline):
model = Workplan
с
class WorkplanInline(admin.TabularInline):
model = Costing.costing_workplan.through
Подробнее об этом можно прочитать в документации ModelAdmin в разделе "Работа с моделями "многие-ко-многим"": (https://docs.djangoproject.com/en/3.2/ref/contrib/admin/#django.contrib.admin.ModelAdmin)