2017-07-06 16 views
0

モデルフォームを拡張しましたが、関連モデルがデータベースに正しく保存されていません。 以下、私はSupplyAddress.objects.create()経由でインスタンスを作成して保存するのではなく、SupplyAddress()と呼んでいます。しかし、これを実行しようとすると、関連するアドレス(およびユーザー)はまだ保存されていません。ユーザーを保存する最も良い方法は、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 'Meta'フィールドリストに '占有'していると、' django.core.exceptions.FieldError:Addressに指定された未知のフィールド(占有されている) 'というエラーが発生し、関連モデルのSupplyAddressにあります。これを取り除くと、必要なフィールドアドレスのヌルエントリを持つ 'SupplyAddress.objects.create()'のエラーが発生します(関連するモデルアドレスのインスタンスが必要です) – Yunti

+0

ええ、あなたは正しいです。フィールドを追加する必要はありません。 saveメソッドを試してください。 – zaidfazil

関連する問題