Django admin内联显示但外键有相反的关系

Posted

技术标签:

【中文标题】Django admin内联显示但外键有相反的关系【英文标题】:Django admin inline display but foreign key has opposite relation 【发布时间】:2013-02-26 16:50:34 【问题描述】:
class One(models.Model):
    image = models.ImageField(upload_to="images")
    summary = models.TextField()

    def __unicode__(self):
        return self.summary


class Two(models.Model):
    image = models.ImageField(upload_to="images")
    title = models.CharField(max_length=50)

    def __unicode__(self):
        return self.title


class Three(models.Model):



  one = models.ForeignKey(One, related_name='one_home')
    two = models.ForeignKey(Two, related_name='two_home')

    def __unicode__(self):
        return self.tile

现在我想要在 Django Admin 中将一和二显示为三的内联。

我到处搜索,但内联显示给出了相反的关系。就像一个有外键三的地方。不是我想要的相反。

【问题讨论】:

完全可以将一和二显示为三的内联,您只需将关系船移动到其他模型。在模型三中定义这些关系有什么原因吗? 是的,根据我的要求,模型必须是这样的......我不想对模型进行更改 这在 Django admin 中似乎是不可能的,因为在构建 Three 时,它需要有 OneTwo 的 ID 才能保存。在 Django 管理员中没有办法告诉它“保存一个,然后保存两个,然后保存三个”。它将尝试使用一个 SQL 命令将所有内容保存到数据库中。你必须改变你的模型才能让它按照你想要的方式工作。 【参考方案1】:

相当简单:

你的模型“坏了”,三个只能有1个1和1个2。

您可以为一个和两个实体创建一个包含三个的列表。

如果你反转外键,改变它们所在的模型(都指向@三)

class OneToThreeInline(admin.StackedInline):
    fk_name = 'three'
    model = One

class TwoToThreeInline(admin.StackedInline):
    fk_name = 'three'
    model = Two

【讨论】:

以上是关于Django admin内联显示但外键有相反的关系的主要内容,如果未能解决你的问题,请参考以下文章

Django Admin - 表格内联外键字段列表的动态值

Django 模型外键 on_delete=null 但外键还是被删除了

django admin 在 save_model 方法中删除内联对象

django-外键和表关系

Django Admin Cookbook-22如何将一对一关系添加为Admin内联字段

在 django admin 中禁用/隐藏不必要的内联表单