2015-05-28 23 views
0

我有兩個型號:如何創建將顯示來自兩個模型的字段的表單?

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

它看起來像這張圖片上,我不知道該怎麼我在他們的價格旁邊顯示產品名稱?例如: hehe - 12 $

現在我只有名字,我想從模型「產品」中獲取成本,任何人都知道我該怎麼做?

回答

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) 
    
相關問題