2012-09-26 52 views

回答

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]