【问题标题】:Django: Multiple values in Radio Select FormDjango:无线电选择表单中的多个值
【发布时间】: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


【解决方案1】:

您可以简单地更新 UserAddress __str__ 方法以包含这些详细信息。

class UserAddress(models.Model):
     ...

    def __str__(self):
        return ", ".join([a for a in (
            self.street, self.city, self.state
        ) if a])

【讨论】:

  • @JasonHoward “休息”?就像&lt;br&gt; 标签一样?
猜你喜欢
  • 2017-06-10
  • 2015-07-13
  • 2011-08-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-31
  • 2021-11-16
  • 1970-01-01
相关资源
最近更新 更多