У меня есть следующие модели:Используя одну форму для двух аналогичных моделей
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 есть большинство тех же полей ...?
Как это сделать в 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
Как использовать post_save, чтобы сделать это? Я знаю, что я вызываю post_save (savetoprofile, sender = OrderBilling), но как использовать аргументы в savetoprofile для сохранения в ProfileBilling? –
я сделал следующее: четкости save_to_profile (отправитель, экземпляр, созданный, ** kwargs): ProfileBilling.create ( адреса = instance.address, address_2 = instance.address_2, города = instance.city, состояние = экземпляр .state, zip_code = instance.zip_code) post_save (save_to_profile, sender = OrderBilling) –
@JotaOnasys Только что обновил ответ;) –