Skip to main content
 首页 » 编程设计

python之Django 在子项中编辑父项的字段

2024年10月17日30mfryf

我遇到了 django-admin 的问题。我有三个对象:

  • 描述
  • 工作
  • 项目

我想直接在作业和项目中编辑描述。

这是我的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) 

因此,从概念上讲,Description 是Job 和Project 的父级。

还有我的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 期望关系是另一种方式。

我还尝试用 OneToOneField 替换 ForeignKey,但没有成功。

关于如何解决这个问题有什么想法吗?

请您参考如下方法:

您收到此错误是因为内联旨在用于另一个方向(参见 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()