2017-07-06 82 views
0

我擴展了一個模型,但相關模型沒有正確保存到數據庫。 下面我只打電話SupplyAddress(),而不是通過SupplyAddress.objects.create()創建並保存它的一個實例。但是,如果我嘗試這樣做,那麼相關的地址(和用戶)還沒有創建,以防止存儲。保存用戶的最佳方式是什麼,AddressSupplyAddress擴展模型不保存相關表

models.py

class Address(models.Model): 
    user = models.ForeignKey(settings.AUTH_USER_MODEL) 
    house_name_number = models.CharField(max_length=255, verbose_name="house name or number") 
    street_name = models.CharField(max_length=255) 
    town_city = models.CharField(max_length=255) 
    county = models.CharField(max_length=255) 
    postcode = models.CharField(max_length=8) 

    time_stamp = models.DateField(auto_now=True) 

class SupplyAddress(models.Model): 
    address = models.OneToOneField(Address) 
    region = models.ForeignKey(Region, null=True) 

    occupied = models.BooleanField() 

forms.py

class SupplyAddressForm(forms.ModelForm): 

    occupied = forms.BooleanField()  


    def save(self, *args, **kwargs): 
     super().save(*args, **kwargs) 
     data = self.cleaned_data 
     supply_address = models.SupplyAddress(
      occupied=data['occupied'], 
     ) 
     self.instance.supplyaddress = supply_address 
     return self.instance 

    class Meta: 
     model = Address 
     fields = ['house_name_number', 
        'street_name', 
        'town_city', 
        'county', 
        'same_address', 
        'move_in_date', 
        'postcode', 
        ] 

views.py

..... 
address = form.save(commit=False) 
     address.user = user 
     address.save() 

回答

0

編輯您的保存方法,

class SupplyAddressForm(forms.ModelForm): 

    occupied = forms.BooleanField()  

    class Meta: 
     model = Address 
     fields = ['house_name_number', 
        'street_name', 
        'town_city', 
        'county', 
        'same_address', 
        'move_in_date', 
        'postcode', 
        ] 

    def save(self, *args, **kwargs): 
     data = self.cleaned_data 
     supply_address = models.SupplyAddress.objects.create(occupied=data['occupied']) 
     instance = super(SuppyAddressForm, self).save(*args, **kwargs) 
     instance.supplyaddress = supply_address 
     instance.save() 
     return instance 
+0

感謝BU t在'Meta'' fields'列表中'佔用'會導致錯誤'django.core.exceptions.FieldError:爲地址指定的未知字段(已佔用)「,因爲佔用位於相關型號SupplyAddress上。刪除這個,我得到一個錯誤,由於'SupplyAddress.objects.create()'有一個空的條目爲必填字段地址(它需要一個相關模型地址的實例) – Yunti

+0

是的,你是對的。不需要在字段中添加。嘗試保存方法。 – zaidfazil