0

だから私は所有者manytomanyフィールドを持つHouseモデルのモデルフォームセットを持っています.現在ログインしているユーザーIDを所有者として自動的に保存したいという事実のために、所有者フィールドを除外しています.隠しフィールドを使用していますが、それがどのように適切に行われているかを知りたいです。

明確にするために、整合性エラーは owner_id を null にすることはできないということです。

ビュー.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
4

1 に答える 1

2

Django Documentation によると、これがインライン フォームセットの目的です。

インライン フォームセットは、モデル フォームセットの上にある小さな抽象化レイヤーです。これらは、外部キーを介して関連オブジェクトを操作するケースを簡素化します。

于 2012-10-07T22:27:54.680 に答える