以下是我简单的models.py/admin.py摘录:http://pastebin.com/uSHrG0p2
用2句话:
元素引用1个样式和1个帖子(2个FK)。
页面可以引用许多元素,元素可以被许多页面引用(M2M)。
在Page实例的管理站点上,我将M2M关系包含为“内联”。所以我有多行来选择Element-instances。 一行看起来像:[My Post A with My Style X] [V]
我想要的是用2个下拉列表替换掉一个下拉列表。一个包含Post的所有实例,一个包含Style的所有实例(就地创建Element实例)。所以一行看起来类似于Element管理站点:[我的帖子A] [V] [我的风格X] [V]
听起来很简单,但在阅读并使用ModelForms,ModelAdmins,Formsets,...进行为期2天的实验后,我才完全迷失了。 如果没有Django管理功能中的自定义视图/表单,我可以这样做吗?
我的一种方法是从这样的PageAdminForm访问Post / Style实例,尝试从中手动创建表单窗口小部件......但未能这样做:
p = Page.objects.get(pk=1)
f = PageAdminForm(instance=p)
f.base_fields['elements'].choices.queryset[0].post
任何建议或提示我需要走哪条路? 谢谢你的时间!
答案 0 :(得分:1)
删除M2M字段并将元素链接到元素中具有第3个ForeignKey的页面后,我得到了我想要的内容:
class Element(models.Model):
page = models.ForeignKey(Page)
post = models.ForeignKey(Post)
style = models.ForeignKey(Style)
实际上,非M2M链接对我的应用程序更有意义。
回忆自己:在试图超越Django之前重新思考模型关系: - (