【问题标题】:Reverse Inlines in Django AdminDjango Admin中的反向内联
【发布时间】:2023-03-26 16:31:02
【问题描述】:

我有 2 个模型如下。现在我需要在模型 B 的页面上内联模型 A。

models.py

class A(models.Model):
    name = models.CharField(max_length=50)

class B(models.Model):
    name = models.CharField(max_length=50)
    a = models.ForeignKey(A)

admin.py

class A_Inline(admin.TabularInline):  
    model = A

class B_Admin(admin.ModelAdmin): 
    inlines = [A_Inline]

这可能吗?如果是,请告诉我..

【问题讨论】:

  • 如果这真的是你需要的,也许你必须重新考虑你的 FK

标签: python django django-models django-admin


【解决方案1】:

不,因为 A 需要有一个到 B 的 ForeignKey 才能用作内联。否则保存内联 A 后如何记录关系?

【讨论】:

  • 如果您真的需要它,并且您确定您的关系是正确的(即正确的外键等),您可以覆盖 B 页面的管理模板并手动写入 A 的表单。或者,您可以在 A 和 B 之间创建一个通用外键,但这会改变 A 的含义(即,允许 A 与任何未指定的对象相关)
  • 有什么问题:a.save()、b.a=a、b.save()?我有一个模型配置,我想在其中存储其他模型的元数据。我想为其他模型和内联配置添加一对一的关系,显然这是不可能的。为什么django不能保存内联,在关系上设置,保存原始模型?
【解决方案2】:

你不能像 timmy O'Mahony 所说的那样去做。但是如果你愿意,你可以让 B 在 A 中内联。或者也许你可以操纵 django 如何在

中显示它

def unicode(自我):

models.py

class A(models.Model):
    name = models.CharField(max_length=50)
    def __unicode__(self):
        return self.name

class B(models.Model):
    name = models.CharField(max_length=50)
    a = models.ForeignKey(A)

admin.py

class B_Inline(admin.TabularInline):  
    model = B
class A_Admin(admin.ModelAdmin):
    inlines = [
        B_Inline,
    ]
admin.site.register(A, A_Admin)
admin.site.register(B)

或者也许您想使用多对多关系?

models.py

class C(models.Model):
    name = models.CharField(max_length=50)
    def __unicode__(self):
        return self.name
class D(models.Model):
    name = models.CharField(max_length=50)
    cs = models.ManyToManyField(C)

admin.py

class C_Inline(admin.TabularInline):  
    model = D.cs.through
class D_Admin(admin.ModelAdmin):
    exclude = ("cs",)
    inlines = [
        C_Inline,
    ]
admin.site.register(C)
admin.site.register(D, D_Admin)

【讨论】:

    猜你喜欢
    • 2012-08-10
    • 2011-02-23
    • 2011-03-08
    • 1970-01-01
    • 2023-03-20
    • 2020-04-16
    • 2011-08-09
    • 2013-03-17
    • 1970-01-01
    相关资源
    最近更新 更多