内联编辑与模型相关的所有ForeignKey[Django admin]

2024-09-26 22:55:09 发布

您现在位置:Python中文网/ 问答频道 /正文

django有一种在其父内联中显示ForeignKey的方法。[refer]
我需要的完全相反。

我在我的网站上有一个导航栏,我只需要一个菜单模型来控制导航栏下菜单按钮的名称和url。并且子MenuButton的数量固定为4(以后不会改变)。
因此,设计菜单模型最简单、最恰当的方法如下:

class MenuButton(models.Model):
    class Meta:
        verbose_name = u"菜单按钮"
        verbose_name_plural = u"菜单按钮"

    name = models.CharField(u'名字', max_length=8)
    url = models.CharField(u'链接', max_length=100)
    priority = models.IntegerField(u'排序优先级', null=True, blank=True)
    create_time = models.DateTimeField(u'创建时间', auto_now_add=True)
    update_time = models.DateTimeField(u'更新时间', auto_now=True)

    def __unicode__(self):
        return self.name


class Menu(models.Model):
    class Meta:
        verbose_name = u"菜单"
        verbose_name_plural = u"菜单"

    button_1 = models.ForeignKey(MenuButton, verbose_name=u'按钮1', related_name="button_1")
    button_2 = models.ForeignKey(MenuButton, verbose_name=u'按钮2', related_name="button_2")
    button_3 = models.ForeignKey(MenuButton, verbose_name=u'按钮3', related_name="button_3")
    button_4 = models.ForeignKey(MenuButton, verbose_name=u'按钮4', related_name="button_4")

我只想让管理员看一个菜单。人只能更改MenuAdmin编辑表单中的四个按钮,既不能删除也不能添加新的按钮。但是我找不到一个自定义域的方法。在


Tags: 方法name模型trueurlverbosemodelmodels
1条回答
网友
1楼 · 发布于 2024-09-26 22:55:09

这是设计错误的。2种解决方案:

  1. 在MenuButton中使用普通外键,并以其他方式限制按钮数(更好的解决方案)
  2. 用户onetoonefield而不是外键(不如第一个好,后面解释)

当第一个解决方案使用,你可以限制和确保将始终有4个按钮,只有4个在你的管理员(或视图,如果你允许编辑它以外的管理员)。您可以将max_nummin_num属性提供给内联管理。您也可以通过在所有情况下返回false来重写has_add_permission和has_delete_权限以从管理员中删除所有添加和删除功能。在

当使用第二种解决方案时,您也可以这样做,但是获取所有按钮的查询将更复杂,也不太理想。所以你应该坚持第一个设计。在

相关问题 更多 >

    热门问题