【发布时间】:2018-03-12 08:45:57
【问题描述】:
我有一个显示用户保存的地址的单选表单。目前,当用户访问“选择地址”模板时,他们只会看到他们保存的每个地址的“街道”字段。正如我通过测试建立的,这由下面的“return self.street”行控制。我希望用户查看他/她保存的每个地址的街道、城市和状态。从列表中,他们将选择他们想要运送到的地址旁边的单选按钮。
模型.py
class UserCheckout(models.Model):
user = models.OneToOneField(settings.AUTH_USER_MODEL, on_delete=models.CASCADE, null=True, blank=True)
email = models.EmailField(unique=True)
class Order(models.Model):
user = models.ForeignKey(UserCheckout, null=True, on_delete=models.CASCADE)
billing_address = models.ForeignKey(UserAddress, related_name='billing_address', null=True, on_delete=models.CASCADE)
order_id = models.CharField(max_length=20, null=True, blank=True)
class UserAddress(models.Model):
street = models.CharField(max_length=120, null=True, blank=True)
city = models.CharField(max_length=120)
state = models.CharField(max_length=120, choices=STATE_CHOICES, null=True, blank=True)
def __str__(self):
return self.street
forms.py
class AddressForm(forms.Form):
billing_address = forms.ModelChoiceField(
queryset=UserAddress.objects.all(),
widget = forms.RadioSelect,
empty_label = None,
)
我正在使用基于类的视图。以下是该视图中的一些函数,我认为它们正在控制模板中的输出:
views.py
def get_addresses(self, *args, **kwargs):
user_check_id = self.request.session.get("user_checkout_id")
user_checkout = UserCheckout.objects.get(id=user_check_id)
b_address = UserAddress.objects.filter(user=user_checkout)
return b_address
def get_form(self, *args, **kwargs):
form = super(AddressSelectFormView, self).get_form(*args, **kwargs)
b_address = self.get_addresses()
form.fields["billing_address"].queryset = b_address
return form
在模板中,我有以下内容:
{% csrf_token %}
{{ form }}
<input type='submit' value='Select' />
</form>
我应该提到,我的所有代码都可以正常工作,除了在 Radio select 表单中只显示“street”,我希望为每个可用选项。换句话说,这纯粹是一个演示问题。
谢谢!
【问题讨论】:
-
请不要破坏自己的帖子。
标签: django django-forms