Django:Radio Select Form中的多个值

时间:2018-03-12 08:45:58

标签: django django-forms

我有一个无线电选择表单,显示用户已保存的地址。目前,当用户访问"选择地址"模板,他们只显示街道'他们已保存的每个地址的字段。这是由" 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;正在收音机选择表格中显示,我希望为每个可用选项显示街道,城市和州。换句话说,这纯粹是一个演示问题。

谢谢!

1 个答案:

答案 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])