0

我正在尝试为具有多个模型的外键的内联项目设置管理员。我正在使用 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 模型,则相反。

4

0 回答 0