0

在绞尽脑汁好几天之后,我只希望有人能指出我正确的方法。我有 4 个模型:页面、元素、样式和帖子。

这是我的简单 models.py/admin.py 摘录:http ://pastebin.com/uSHrG0p2

2句话:

一个元素引用了 1 个样式和 1 个帖子(2 个 FK)。

一个页面可以引用很多元素,元素可以被很多页面引用(M2M)。

在页面实例的管理站点上,我将 M2M 关系包含为“内联”。这样我就有多行来选择元素实例。一行看起来像:[My Post A with My Style X][V]

我想要的是用 2 个下拉列表替换那个下拉列表。一个包含所有 Post 实例,一个包含所有 Style 实例(就地创建 Element 实例)。这样一行看起来类似于 Element 管理站点:[My Post A][V] [My Style X][V]

听起来很简单,但在阅读和试验了 2 天的 ModelForms、ModelAdmins、Formsets 之后,我完全迷失了。我可以在没有 Django 管理功能中的自定义视图/表单的情况下做到这一点吗?

我的一种方法是像这样从 PageAdminForm 访问 Post/Style 实例,尝试从中手动创建表单小部件......但未能这样做:

p = Page.objects.get(pk=1)
f = PageAdminForm(instance=p)
f.base_fields['elements'].choices.queryset[0].post

有什么建议或提示我需要走哪条路吗?感谢您的时间!

4

1 回答 1

1

在删除 M2M 字段并将 Elements 链接到具有 Element 中的第三个 ForeignKey 的页面后,我得到了我想要的:

class Element(models.Model):
    page = models.ForeignKey(Page)        
    post = models.ForeignKey(Post)
    style = models.ForeignKey(Style)

实际上,毕竟非 M2M 链接对我的应用程序更有意义。

给自己的备忘录:在试图超越 Django 之前重新考虑模型关系 :-(

于 2011-03-03T08:06:45.487 回答