gpt4 book ai didi

django admin 在 save_model 方法中删除内联对象

转载 作者:行者123 更新时间:2023-12-01 11:54:47 27 4
gpt4 key购买 nike

我有两个相关的(通过外键关系)模型并使用内联为父级创建了管理模型。在几种情况下(通过 bool 字段在管理员中编辑),我需要删除所有以前的对象(内联)并创建新对象。我尝试使用 save_model 来实现它,我可以在其中获取所有当前对象的属性并决定是否需要重新创建(内联)对象。
楷模:

class Model1(models.Model):
reformat = models.BooleanField(default=False)
...
class Model2(models.Model):
model1 = ForeignKey(Model1, related_name='model2')
...

行政:
class Model2Inline(admin.TabularInline):
model = Model2

class Model1Admin(admin.ModelAdmin):
inlines = [Model2Inline]
def save_model(self, request, obj, form, change):
super(Model1Admin, self).save_model(request, obj, form, change)
if obj.reformat:
obj.model2.all().delete()
# creating new objects
...
obj.save()

但是,如果我尝试在 model_save 方法中删除这些对象,则会出现 ValidationError。
有没有其他可能来解决这个问题?

最佳答案

我也遇到了这个问题,在用头撞墙一两个小时后,通过覆盖 save_formset() 解决了这个问题。在管理对象上而不是 save_model()并在调用父类(super class)的 save_formset() 后进行所需的操作方法。这样做意味着在保存表单集时您要删除的模型仍然存在,因此您不会收到验证错误。

在您提供的示例中,它可能如下所示:

class Model2Inline(admin.TabularInline):
model = Model2

class Model1Admin(admin.ModelAdmin):
inlines = [Model2Inline]
def save_formset(self, request, form, formset, change):
super(Model1Admin, self).save_formset(request, form, formset, change)
if formset.model is Model2:
obj = formset.instance
if obj.reformat:
obj.model2.all().delete()
# creating new objects
...
obj.save()

关于django admin 在 save_model 方法中删除内联对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8242014/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com