【发布时间】:2020-12-02 03:20:39
【问题描述】:
我有这个简化的模型和形式:
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 表单中添加价格,它只是可见的。 它应该出现在书名之后,最好是使用不同的字体,我在引导类(例如“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,但找不到解决方案。
【问题讨论】:
-
如果你不能连接标签,我相信信息不在你的模型里面或更接近的东西......所以我相信挑战仍然存在于表单实例......它可以使用 ajax 吗?一个从端点(URL)加载额外数据并在客户端连接它的javascript?
-
感谢您的想法,但我对 ajax/javascript 不太熟悉。也许我必须在稍后连接标签并去掉价格,这在 imo 中有点 hacky solultion。
-
额外信息在哪里?以某种方式在您的数据库中,或者您必须从另一个站点(或外部服务)获取它?
标签: django django-forms django-crispy-forms