如何防止在InlineForm验证中删除对象?

时间:2012-09-26 18:23:39

标签: django django-forms

我希望能够清除Inline中对象的ForeignKey关联,但实际上不能删除该对象。如何使用Django的验证来防止对象被删除?

1 个答案:

答案 0 :(得分:0)

class LocationInlineFormset(forms.models.BaseInlineFormSet):
    def clean(self):
        for form in self.forms:
            try:
                if form.cleaned_data:
                    loc = Location.objects.filter( /* filter to find the location being edited/added */ )
                    if loc:#This validation only matters if we're not adding a new location
                        loc = loc[0]
                        if form.cleaned_data['DELETE']:
                            # Clear the Foreign Key Association
                            loc.strain = None
                            loc.save()
                            # Prevent Deletion
                            form.data[form.add_prefix('DELETE')] = 'false'
            except AttributeError:
                # annoyingly, if a subform is invalid Django explicity 
                # raises an AttributeError for cleaned_data
                pass

class LocationInline(admin.TabularInline):
    formset = LocationInlineFormset
    model = Location
    extra = 3
    max_num = 3
    can_delete = True

class StrainAdmin(MyAdmin):
    inlines = [LocationInline]
相关问题