我正在尝试为具有多个模型的外键的内联项目设置管理员。我正在使用 nested-django-admin 设置嵌套内联,这就是为什么您会看到我的管理员设置方式略有不同。
用户/模型.py
from django.db import models
class Human(models.Model):
name = models.CharField(max_length=50)
age = models.IntegerField()
def __str__(self):
return self.name
class Parent(Human):
job = models.CharField(max_length=50)
def __str__(self):
return self.name
class Child(Human):
favorite_toy = models.CharField(max_length=50)
def __str__(self):
return self.name
家务/models.py
from django.db import models
from user.models import Human, Parent, Child
class Chore(models.Model):
assigned_by = models.ForeignKey(Parent, on_delete=models.CASCADE)
assigned_to = models.ForeignKey(Child, on_delete=models.CASCADE)
other_parent = models.ForeignKey(Parent, on_delete=models.CASCADE)
description = models.CharField(max_length=50)
def __str__(self):
return self.description
用户/管理员.py
from django.contrib import admin
from .models import Human, Parent, Child
from chore.admin import ChoreInline
import nested_admin
class ParentAdmin(nested_admin.NestedModelAdmin):
inlines = [ChoreInline]
class ChildAdmin(nested_admin.NestedModelAdmin):
inlines = [ChoreInline]
家务/admin.py
from django.contrib import admin
from .models import Chore
import nested_admin
class ChoreInline(nested_admin.NestedStackedInline):
model = Chore
fk_name = 'assigned_by'
class ChoreAdmin(nested_admin.NestedModelAdmin):
pass
admin.site.register(Chore, ChoreAdmin)
我希望这能够顺利运行,以便用户能够在他们的管理员更改中看到与孩子相关的家务,而对于父母来说也是如此。
我得到的是这个错误。
<class 'chore.admin.ChoreInline'>: (admin.E202) fk_name 'assigned_by' is not a ForeignKey to 'user.Child'.
如果我将 fk_name = 'assigned_by' 更改为 fk_name = 'assigned_to' 我会收到以下错误
<class 'chore.admin.ChoreInline'>: (admin.E202) fk_name 'assigned_to' is not a ForeignKey to 'user.Parent'.
我对如何更改这一点感到困惑,以便不再收到这些错误。似乎如果我将 fk_name 更改为解决其中一个 Parent 模型,则它需要一个用于 Child 模型的 fk_name,如果我切换 fk_name 以解决 Child 模型,则相反。