我有一个无线电选择表单,显示用户已保存的地址。目前,当用户访问"选择地址"模板,他们只显示街道'他们已保存的每个地址的字段。这是由" return self.street"我通过测试确定了下面的一行。我希望用户查看他/她保存的每个地址的街道,城市和状态。从列表中,他们会选择他们要发送到的地址旁边的单选按钮。
models.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>
我应该提到我的所有代码都在使用,但只有&#39; street&#39;正在收音机选择表格中显示,我希望为每个可用选项显示街道,城市和州。换句话说,这纯粹是一个演示问题。
谢谢!
答案 0 :(得分:0)
您只需更新UserAddress
__str__
方法即可包含这些详细信息。
class UserAddress(models.Model):
...
def __str__(self):
return ", ".join([a for a in (
self.street, self.city, self.state
) if a])