Django RadioSelect 模型中的选择

Posted

技术标签:

【中文标题】Django RadioSelect 模型中的选择【英文标题】:Django RadioSelect Choices From Model 【发布时间】:2013-12-24 00:41:23 【问题描述】:

假设我的 Django 应用中有以下模型:

class Gift_Card(models.Model):
    title = models.CharField(blah blah)
    company = models.CharField(blah blah)
    denomination = models.ForeignKey('Denomination')

class Denomination(models.Model):
    is_subscription = models.BooleanField(blah blah)
    is_money = models.BooleanField(blah blah)
    amount = models.IntegerField(blah blah)

写得不好,但这是我想要的:

通用礼品卡模型 支持多种金额(1 年订阅卡、20 美元礼品卡等)

我写了一个表单来从我的 Django 应用程序中请求一张卡片,并且有一个数量字段(很简单),一个礼品卡名称字段(用于验证,而且很简单),我希望有一个电台选择字段。单选字段应填充与手头礼品卡相关的面额模型。但是,我不确定该怎么做。有什么帮助吗?

【问题讨论】:

【参考方案1】:

这是一个小部件级别的选择,而不是字段级别的选择,内置的 Radioselect 小部件完全符合您的要求:

https://docs.djangoproject.com/en/dev/ref/forms/widgets/#radioselect

无论如何,假设您喜欢它的渲染选择。如果不是,您可以子类化,或者在足够新的版本上循环模板中的选项。

要使用它,请使用指定 widget 参数的 ModelChoiceField:

denomination = forms.ModelChoiceField(queryset=Denomination.objects.all(), widget=forms.RadioSelect)

或者,如果您使用的是 ModelForm:

class GiftCardForm(forms.ModelForm):
    class Meta:
        model = Gift_Card
        widgets = 'denomination': forms.RadioSelect

【讨论】:

谢谢!我想你以前也帮助过我,哈哈。我稍后会使用它,但可以肯定的是,这些方法将通过 str 方法(我将提供)来表示面额,对吧? 它默认为面额类的__unicode__ 方法。如果你不喜欢这样,你可以继承ModelChoiceField 并给它一个自定义的label_from_instance 方法——这里在字段文档的底部进行了描述:docs.djangoproject.com/en/dev/ref/forms/fields/… 没关系,这就是我所希望的,哈哈。非常感谢您的帮助

以上是关于Django RadioSelect 模型中的选择的主要内容,如果未能解决你的问题,请参考以下文章

使用 RadioSelect 小部件自定义 Django 表单

如何将 CSS 类添加到 django RadioSelect 标签?

如何在Django管理员中制作单选按钮

在新版本的Django中,`forms.RadioSelect.renderer`的替代方案是什么?

将 CSS 类添加到 django RadioSelect 标签

如何在 Django 中呈现单个单选按钮选项?