0

私は次のモデルを持っています:

class BaseAddress(models.Model):
    name = models.CharField(max_length=100)
    business_name = models.CharField(max_length=100, blank=True, null=True)
    address = models.CharField(max_length=100, blank=True, null=True)
    address_2 = models.CharField(max_length=100, blank=True, null=True)
    address_3 = models.CharField(max_length=100, blank=True, null=True)
    city = models.CharField(max_length=100, blank=True, null=True)
    state = models.CharField(max_length=2, blank=True, null=True)
    zip_code = models.CharField(max_length=10, blank=True, null=True)
    phone = models.CharField(max_length=30, blank=True, null=True)

    class Meta:
        abstract = True



class ProfileBilling(BaseAddress):
    profile = models.OneToOneField(
        Profile, related_name='billing_info')

class OrderBilling(BaseAddress):
    order = models.OneToOneField(Order, related_name='billing')
    name_on_card = models.CharField(max_length=100)
    #card_type = models.PositiveSmallIntegerField(
    #    choices=CARD_TYPE, default=0)
    #card_number = models.CharField(
    #    max_length=16, default=0)
    expire_month = models.PositiveSmallIntegerField(
        choices=MONTHS, null=True, default=0)
    expire_year = models.PositiveSmallIntegerField(
        choices=YEARS, null=True, default=1960)

顧客が請求先住所を入力したら、それをOrderBillingに保存したいのですが、それを最新の請求先住所としてProfileBillingにも保存したいと思います。どうすればいいですか?

OrderBillingとProfileBillingにほとんど同じフィールドがある場合、フォームを使用して請求先住所を2つの異なるテーブルに保存するにはどうすればよいですか...?

Djangoでこれを行うにはどうすればよいですか?

これが私のOrderBillingフォームです。

class OrderBillingForm(forms.ModelForm):

class Meta:
    model = OrderBilling
    exclude = ('order',)

def __init__(self, *args, **kwargs):
    super(OrderBillingForm, self).__init__(*args, **kwargs)
    self.fields['address'].required = True
    self.fields['city'].required = True
    self.fields['state'] = USStateField()
    self.fields['zip_code'] = us.USZipCodeField()
    self.fields['phone'].required = False
    self.fields['expire_month'].required = False
    self.fields['expire_year'].required = False

def clean(self):
    return self.cleaned_data
4

1 に答える 1

0

メソッドをオーバーライドすることもできますがsave()、あなたの場合のより賢い方法は、post_saveこの目的のためにシグナルを使用することです。

保存した後、OrderBillingそのデータをに保存することもできProfileBillingます。

post_saveシグナルに精通している場合は、グーグル検索のいくつかの例を見てください。

お気に入り:

次に、post_saveレシーバーで簡単に|コールバック機能でOrderBillingインスタンスを取得します

orderbil_instance = kwargs['instance']

そして、そのデータからProfileBillingを作成します

ProfileBilling.objects.create(name=orderbil_instance.name, ....)

post_save信号受信機のようなもの

def do_something(sender, **kwargs):
    # Getting OrderBilling instance which get saved just now
    orderbil_instance = kwargs['instance']
    # Save the data into new ProfileBilling
    ProfileBilling.objects.create(name=orderbil_instance.name, ....)
于 2013-03-26T18:28:10.690 に答える