- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有这个简化的模型和形式:
class Books(models.Model):
name = models.CharField(max_length=500)
price = models.DecimalField(max_digits=6, decimal_places=2)
default = models.BooleanField(default=False)
def __str__(self):
return self.name
class BookForm(forms.Form):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.fields['Field'] = forms.ModelChoiceField(queryset=None, empty_label=None, widget=forms.RadioSelect)
self.fields['Field'].queryset = Books.objects.all()
self.fields['Field'].initial = Books.objects.filter(default=True).first()
这将产生一个 RadioSelect-Form,如下所示:
(x) Book1
( ) Book2
( ) Book3
我的问题是,如何在 RadioSelect 表单中添加价格,它只是可见的。它应该出现在书名之后,最好是使用不同的字体,我在 Bootstrap 类(例如“text-primary”)上设置了它(这不是强制性的)
(x) Book1 (10 €)
( ) Book2 (20 €)
( ) Book3 (30 €)
我知道我可以返回模型中的名称和价格,比如
class Books(models.Model):
name = models.CharField(max_length=500)
price = models.DecimalField(max_digits=6, decimal_places=2)
default = models.BooleanField(default=False)
def __str__(self):
return '%s (%s €)' % (self.value, str(self.price))
但由于其他原因,我不能这样做。我只需要返回名称。还有其他方法吗?
我什至阅读了 django-crispy-forms,但找不到解决方案。
最佳答案
您可以使用.label_from_instance
。
来自documentation :
The
__str__()
method of the model will be called to generate string representations of the objects for use in the field’s choices. To provide customized representations, subclassModelChoiceField
and overridelabel_from_instance
.
您可以定义一个函数来为您提供所需的表示,然后在您的字段上设置 .label_from_instance
。
你的 BookForm
看起来像这样:
class BookForm(forms.Form):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.fields['Field'] = forms.ModelChoiceField(queryset=None, empty_label=None, widget=forms.RadioSelect)
self.fields['Field'].queryset = Books.objects.all()
self.fields['Field'].initial = Books.objects.filter(default=True).first()
# customize how your option is rendered in the template
self.fields["Field"].label_from_instance = lambda item: f"{item} ({item.price} €)"
要在标签上应用 CSS,请添加 HTML。除了使用 style='...'
,您还可以使用类,以便它与 Bootstrap 一起工作。
self.fields["Field"].label_from_instance = lambda item: f"{item} <span style='color:red;'>({item.price} €)</span>"
对于 3.7 之前的 Python 版本:
self.fields["Field"].label_from_instance = lambda item: str(item) + "<span style='color:red;'>(" + str(item.price) + " €)</span>"
然后像这样在模板中呈现您的表单:
<form action="{% url 'books' %}" method="post">
{% csrf_token %}
{% for hidden_field in form.hidden_fields %}
{{ hidden_field }}
{% endfor %}
<ul>
{% for choice in form.Field %}
<li>{{ choice.choice_label|safe }}</li>
{% endfor %}
</ul>
<input class="btn btn-dark" type="submit" value="Submit">
</form>
遍历您的领域的选择,然后您可以获得您的自定义标签:
{{ choice.choice_label|safe }}
safe
需要过滤器,这样您的 HTML 就不会被转义。
关于Django RadioSelect 小部件,添加附加信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63375457/
我想将 django 表单小部件 radioselect 渲染到一个表而不是一个 ul 列表中。第一行带有标签,第二行带有下面的单选按钮。每个按钮一个单元格。例如 ------------------
我有以下带有单选选项的表格: jobStatus = forms.ChoiceField( widget=forms.RadioSelect()) 但是,它会在 .. 中呈现单选按钮。标签。 你
我有这个简化的模型和形式: class Books(models.Model): name = models.CharField(max_length=500) price = mod
我有以下表格: class ReviewForm(forms.ModelForm): class Meta: model = Review widgets = { 't
我看了django教程做了一个网站。 https://docs.djangoproject.com/en/1.11/intro/ 我遇到了一个错误, AttributeError at /polls/
我找不到从显示为 -------- 的 Choices_list 中删除第一行的方法。 我已经尝试了一些东西:blank=True, Blank=False, ...这一行仍然存在。 这是我在我的 D
假设我的 Django 应用程序中有以下模型: class Gift_Card(models.Model): title = models.CharField(blah blah) c
我正在尝试使用 django 中提供的 RadioSelect() 小部件来呈现(默认)单选按钮,但是每当我使用它时,输出都是空白的。但是,如果我让 Django 表单加载默认渲染器,它会打印出一个带
我正在使用 Django 制作表单,需要在 HTML 中手动布局表单。我有一个字段是 ChoiceField该小部件是 RadioSelect (即单选按钮而不是选择下拉菜单)。该字段有 2 个选择(
我想创建一个悬停框(或信息框),当用户将鼠标光标放在 Pmw RadioSelect 标签 上时它会打开。例如,当光标放在“Primary”上方时,程序会打开一个信息框,解释“Primary”的含义。
我可以在任何表单字段上设置 help_text 属性,但是是否可以在用于 RadioSelect() 的选项上设置 help_text 属性? 我正在寻找一种简洁的方式来在每个单选按钮下显示一些帮助信
我有一个这样的表格: CHOICES = [ ('a', 'a_value'), ('b', 'b_value'), ('c',
所以我使用 jQuery UI 到 skin the radio buttons但我无法让 Django 以必须完成的方式呈现我的表单。 我需要有这样的结构: Notify
我有一个模型、表单、 View ,但我似乎无法实际显示 RadioSelect 小部件。它没有显示任何内容,我认为除了 View 之外一切都很好,但是,我不确定。我基本上希望有人从两个单选按钮中进行选
EDIT The reason my question is different to the possible duplicate is because that does not address
我正在将调查从 Form 转换为 Django 1.6.2 中的 ModelForm。 谁能告诉我 forms.ChoiceField(widget=forms.Select(), 和 forms.C
我正在创建一个带有一组单选按钮(作为单个 RadioSelect 字段)的 Django 表单,我想让一些按钮变灰。但是,鉴于 RadioSelect 字段是表单上的单个字段,我还没有找到一种方法来做
我正在使用 Django ModelForm,其中我的模型包含 BooleanField,并且与该 BooleanField 关联的表单小部件是 RadioSelect 小部件。我希望 RadioSe
我正在使用 ModelForm 并尝试在 Django forms.RadioSelect 小部件上设置一个 css 类,例如 class Meta: model = models.MyMod
所以我有一些像这样设置的小部件 widgets = { 'history': Select(attrs={'ng-model': 'data.smile_assessment.hist
我是一名优秀的程序员,十分优秀!