首页 > 解决方案 > Django - 管理相关模型编辑

问题描述

我正在尝试解决一些问题,希望能得到您的帮助

有2个型号:

def BigBox(models.Model):
    title = textfield
    date = datetimefield
    author = foreignkey(user)
    # other fields etc.

def SmallBox(models.Model):
    title = textfield
    contained_in = foreignkey(BigBox)
    # little box that can be only in big box

我有办法在 BigBox adminModel 的 readonly_fields 中查看 SmallBoxes,但此时无法编辑或创建新的。


我需要做(下面写的所有内容都适用于 admin.ModelAdmin):

当您编辑/创建 BigBox 时,需要能够在里面创建新的相关 SmallBoxes。

这意味着每个 BigBox 总是包含至少一个 SmallBox 并且每个 SmallBox 总是在任何 BigBox 中。

需要指定在 BigBox 中创建 SmallBoxes 的方式。

标签: pythondjangodjango-admindjango-orm

解决方案


我认为实现这一目标的最佳方法是使用信号

post_save()信号要具体。在声明两个模型类之后,定义一个方法来检查BigBox集是否包含SmallBox实例。如果不是,则创建一个SmallBox实例并附加到BigBox实例。

参考:https ://docs.djangoproject.com/en/dev/ref/signals/#post-save

示例:https ://simpleisbetterthancomplex.com/tutorial/2016/07/28/how-to-create-django-signals.html

上面的示例展示了如何使用post_save.connect()或在函数上使用 @receiver (post_save, sender=BigBox)装饰器来定义函数并附加到模型


推荐阅读