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
时,它需要有 One
和 Two
的 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 模型外键 on_delete=null 但外键还是被删除了
django admin 在 save_model 方法中删除内联对象