如何创建显示两个模型字段的窗体?

2024-03-28 15:43:44 发布

您现在位置:Python中文网/ 问答频道 /正文

我有两个模型:

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')

enter image description here

在这张照片上,我不知道如何在产品名称旁边显示它们的价格?例如: 呵呵-12美元

现在我只有一个名字,我想从模型“产品”得到成本,有人知道我怎么做吗?你知道吗


Tags: name模型selfverbosemodelmodelsformsproduct
1条回答
网友
1楼 · 发布于 2024-03-28 15:43:44

你可以用不同的方法来解决这个问题:

  • 在模型中的__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)
    

相关问题 更多 >