sep*_*red 3 django admin validationerror inlines
我有两个相关的(通过外键关系)模型,并为内联创建管理模型.在几种情况下(由管理员通过布尔字段编辑),我需要删除所有以前的对象(内联)并创建新对象.我已经尝试使用save_model,我可以获取所有当前对象的属性,并决定是否需要重新创建(内联)对象.楷模:
class Model1(models.Model):
reformat = models.BooleanField(default=False)
...
class Model2(models.Model):
model1 = ForeignKey(Model1, related_name='model2')
...
Run Code Online (Sandbox Code Playgroud)
管理员:
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()
Run Code Online (Sandbox Code Playgroud)
但是,如果我尝试在model_save方法中删除这些对象,我会得到ValidationError.还有其他可能解决这个问题吗?
我也遇到了这个问题,经过一两个小时的撞击墙头后,通过覆盖save_formset()管理对象而不是save_model()在调用超类的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()
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3432 次 |
| 最近记录: |