【问题标题】:Django - admin related model editingDjango - 管理相关模型编辑
【发布时间】:2018-11-30 23:21:43
【问题描述】:

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

有两种型号:

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 中查看 SmallBox,但此时无法编辑或创建新的。


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

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

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

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

【问题讨论】:

    标签: python django django-admin django-orm


    【解决方案1】:

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

    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) 装饰器来定义函数并附加到模型在函数之上

    【讨论】:

    • 不完全是我需要的我试图了解我需要在管理模型中写什么,以便在编辑/创建 BigBox 页面中有一个用于编辑和添加 SmallBox 的字段
    • @Prvz 抱歉。误解了问题
    【解决方案2】:

    我通过更好的搜索找到了解决方案。

    这称为“内联” https://docs.djangoproject.com/en/2.0/intro/tutorial07/#adding-related-objects

    【讨论】: