我有两种模式:
class Product(models.Model):
name = models.CharField(verbose_name="name", max_length=40)
cost = models.FloatField(verbose_name="price")
def __unicode__(self):
return self.name
class Shop(models.Model):
product = models.ManyToManyField(Product)
name = models.CharField(verbose_name="Nazwa", max_length=40)
budget = models.FloatField(verbose_name="kwota")
def __unicode__(self):
return self.name
我创建了一个表单
代码:
class ShopForm(forms.ModelForm):
product = forms.ModelMultipleChoiceField(queryset = Product.objects.all(), widget=forms.CheckboxSelectMultiple(),required=True)
name = forms.CharField(max_length=15, label='Name')
budget = forms.FloatField()
class Meta:
model = Shop
fields = ('product','name', 'budget')
看起来在这张照片上,我不知道我怎么能在产品名称旁边显示它们的价格?例如: 呵呵 - 12美元
现在我只有名字,我想从模型“产品”中获得成本,任何人都知道我该怎么办?
答案 0 :(得分:0)
您可以通过不同方式解决此问题:
在模型中的__unicode__
方法中进行更改
class Product(models.Model):
...
def __unicode__(self):
return u"{}({})".format(self.name, self.cost)
覆盖表单
中的init方法 class ShopForm(forms.ModelForm):
def __init__(self, *args, **kwargs):
super(ShopForm, self).__init__(*args, **kwargs)
self.fields['product'].label_from_instance = lambda obj: u"%s | %s" % (obj.name, obj.cost)
创建自定义表单字段:
from django.forms.models import ModelMultipleChoiceField
class ProductModelChoiceField(ModelMultipleChoiceField):
def label_from_instance(self, obj):
return u"%s | %s" % (obj.name, obj.cost)