Django Forms: Как заполнить варианты поля выбора данными, которые потребовали две другие связанные модели
вот схема работы сайта: пользователь создает аккаунт. затем регистрирует несколько адресов. затем, когда он хочет сделать заказ, он должен выбрать один из ранее зарегистрированных адресов
вот модели:
class User(models.Model):
customer_id = models.AutoField(primary_key=True)
class Address(models.Model):
address_id = models.BigAutoField(primary_key=True,)
address = models.CharField(max_length=500, blank=False,null=False,)
customer = models.ForeignKey(User, on_delete= models.CASCADE)
class Order(models.Model):
order_id = models.BigAutoField(primary_key=True)
customer = models.ForeignKey(User, on_delete=models.SET_NULL, null=True)
address = models.ForeignKey(Address, on_delete=models.SET_NULL, null=True)
причина моей проблемы в том, что я должен использовать formtools (FormWizard) для разделения формы заказа на несколько страниц. Вот форма:
class NewOrderForm1(forms.Form):
...
class NewOrderForm2(forms.Form):
address = forms.ChoiceField(required=True,choices=??)
name = forms.CharField()
class NewOrderForm3(forms.Form):
...
class NewOrderForm4(forms.Form):
...
у меня 4 формы, как вы видите, и поле адреса находится во второй форме.
В views.py
у меня есть следующее:
class NewOrder(SessionWizardView, LoginRequiredMixin):
form_list = [NewOrderForm1, NewOrderForm2, NewOrderForm3, NewOrderForm4]
def get_template_names(self):
return [TEMPLATES[self.steps.current]] # templates for each form
def done(self, form_list,*context ,**kwargs):
type_form, deliver_info_form, time_form, final_form = form_list # "deliver_info_form" is the second form(NewOrderForm2) in forms.py
address = deliver_info_form.address
name = deliver_info_form.name
customer = self.request.user
order = Order.objets.create(
address=address,
name=name,
customer_id=customer.customer_id,
)
order.save()
return render(self.request, template_name="thanks.html",)
все до второй формы/шаблона работает нормально. но я не могу получить ни одного адреса.
Заранее спасибо :)