2012-10-07 35 views
0

因此,我有一个House模型的modelformset,它有一个manytomany字段的业主,由于我希望它自动保存当前登录的用户ID作为所有者 - 我可能破解隐藏字段,但宁愿知道如何正确完成。Django:模型FormSet上的完整性错误 - 不包括所需的M2M字段

为清楚起见,完整性错误是owner_id不能为空,我在通过硬编码只是在manage_houses

views.py

def manage_houses(request):                                                     
    HousesFormSet = modelformset_factory(House, form=ManageHousesForm)                                         

    if request.method == 'POST':                                              
     formset = HousesFormSet(request.POST)                                                

     # failed attempt at fixing integrity error                                                     
     for form in formset:                                                     
      form.owner_id = 1                                                    

     if formset.is_valid():                                                     
      if formset.save():                                                     
       notice  = "Success! Your houses were updated in the system."                                        
       notice_type = "success"                                                  
      elif not formset.has_changed():                                                 
       pass                                                       
      else:                                                        
       notice  = "Something went wrong! Your houses may not have been updated."                                     
       notice_type = "error"                                                   
    else:                                                          
     formset = SpecialsFormSet()                                                   

    response_details = { 'formset': formset,                                                 
        'fields': ManageHousesForm.base_fields }                                           

    try:                                                          
     response_details['notice']  = notice                                                
     response_details['notice_type'] = notice_type                                               
    except NameError:                                                       
     pass                                                         

    return render_to_response('houses/manage.djhtml', response_details) 

的开始看到失败修复它尝试models.py

class House(models.Model):                                                    
    class Meta:                                                        
     app_label = 'houses'                                                    

    # Fields                                                         
    owners   = models.ManyToManyField(User)                                                

    name   = models.CharField(max_length=50)                                               
    slug   = models.SlugField(max_length=100, blank=True, editable=False, unique=True)                                    
    address   = models.CharField(max_length=75)                                                 

    def __unicode__(self):                                                      
     return self.name 
+1

你能附上你的模型代码吗? –

+0

编辑:附加。 –

回答

2

根据Django的Documentat这是什么inline formsets用于:

内联formset是模型formsets顶部的小型抽象层。 这些简化了通过外键 键处理相关对象的情况。