内联编辑与模型相关的所有外键[django admin]
inline edit all ForeignKey related to a model[django admin]
django 有办法在其 parent 内联中显示外键。[refer]
我需要的是完全反转
我的站点有一个导航栏,我只需要一个菜单模型来控制导航栏下菜单按钮的名称和url。而childMenuButton
的个数固定为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")
我只想管理员显示一个Menu.People只能更改MenuAdmin
编辑表单中的四个按钮,既不能删除也不能添加新的button.But我找不到方法建立一个自定义字段。
这是设计错误。解决该问题的 2 个解决方案:
- 在 MenuButton 中使用正常的外键并以其他方式限制按钮的数量(更好的解决方案)
- 用户 OneToOneFields 而不是外键(不如第一个好,稍后解释)
当使用第一个解决方案时,您可以限制并确保在您的管理员中始终有 4 个且只有 4 个按钮(或视图,如果您允许在管理员外部编辑它)。您可以将 max_num and min_num 属性提供给内联管理。您还可以通过在所有情况下返回 false 覆盖 has_add_permission 和 has_delete_permission 以从管理员中删除所有添加和删除功能。
当使用第二种解决方案时,您也可以这样做,但获取所有按钮的查询将更加复杂且不太理想。所以你应该坚持第一种设计。
django 有办法在其 parent 内联中显示外键。[refer]
我需要的是完全反转
我的站点有一个导航栏,我只需要一个菜单模型来控制导航栏下菜单按钮的名称和url。而childMenuButton
的个数固定为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")
我只想管理员显示一个Menu.People只能更改MenuAdmin
编辑表单中的四个按钮,既不能删除也不能添加新的button.But我找不到方法建立一个自定义字段。
这是设计错误。解决该问题的 2 个解决方案:
- 在 MenuButton 中使用正常的外键并以其他方式限制按钮的数量(更好的解决方案)
- 用户 OneToOneFields 而不是外键(不如第一个好,稍后解释)
当使用第一个解决方案时,您可以限制并确保在您的管理员中始终有 4 个且只有 4 个按钮(或视图,如果您允许在管理员外部编辑它)。您可以将 max_num and min_num 属性提供给内联管理。您还可以通过在所有情况下返回 false 覆盖 has_add_permission 和 has_delete_permission 以从管理员中删除所有添加和删除功能。
当使用第二种解决方案时,您也可以这样做,但获取所有按钮的查询将更加复杂且不太理想。所以你应该坚持第一种设计。