Django在子项内编辑父项的字段

时间:2016-07-07 12:08:24

标签: python django django-models django-admin python-3.5

我正面临着django-admin的问题。我有三个对象:

  • 描述
  • 工作
  • 项目

我想直接在Job和Project中编辑描述。

这是我的model.py

class Description(models.Model):
    short_desc = models.TextField()
    long_desc = models.TextField()


class Job(models.Model):
    location = models.TextField()
    desc = models.ForeignKey(Description)


class Project(models.Model):
    name = models.TextField()
    desc = models.ForeignKey(Description)

因此,从概念上讲,DescriptionJobProject的父级。

我的admin.py

class DescriptionInLine(admin.StackedInline):
    model = Description


@admin.register(Project)
class ProjectAdmin(admin.ModelAdmin):
    model = Project
    inlines = [DescriptionInLine]


@admin.register(Job)
class JobAdmin(admin.ModelAdmin):
    model = Job
    inlines = [DescriptionInLine]

每当我运行django服务器时,我都会收到以下错误:

<class 'admin.DescriptionInLine'>: (admin.E202) 'Description' has no ForeignKey to 'Job'.

我明白为什么会收到错误:django希望关系是另一种方式。

我也尝试将ForeignKey替换为OneToOneField,但没有成功。

关于如何解决这个问题的任何想法?

1 个答案:

答案 0 :(得分:2)

您收到此错误,因为内联旨在用于其他方向(请参阅this question)。

我认为,对于您的用例,您最好使用model inheritance

class Description(models.Model)

    class Meta:
        abstract = True
        # Abstract is optional but I think for your usecase,
        # standalone `Description` does not make any sense.
        # If not `abstract`, a one-to-one relation will be implied
        # between parent and children

    short_desc = models.TextField()
    long_desc = models.TextField()

class Job(Description):
    location = models.TextField()

class Project(Description):
    name = models.TextField()