2016-10-03 45 views
0

這是一個非常基本的問題,我已經搜索並嘗試了很多方法來做到這一點,但我想知道最好的做法/最好的方法去做。需要在modelchoicefield中獲得id而不是選定的值django

有一張表格,我試圖從另一張表中存儲用戶選擇的代碼。想要的是

模型表單組合框中顯示description字段值,同時將其各自的pos_code保存在表中。

這是我的模型和形式:

pos_code = forms.ModelChoiceField(queryset=Positions.objects) 

在這裏,我想插入pos_code對所選description用戶:

class TmpPlInvoice(models.Model): 
    voucher_id = models.CharField(primary_key=True, max_length=10) 
    pos_code = models.ForeignKey(Positions, models.DO_NOTHING, db_column='pos_code', blank=True, null=True) 

    class Meta: 
     managed = False 
     db_table = 'tmp_pl_invoice' 

我從這個模型得到的選擇領域:

class Positions(models.Model):          

    pos_code = models.CharField(primary_key=True, max_length=10, blank=True, null=True) 
    description = models.CharField(max_length=100, blank=True, null=True) 

    class Meta: 
     managed = False 
     db_table = 'positions' 

    def __unicode__(self): 
     return self.description 

但它給我description我而不是pos_code。我知道我正在返回描述,但我需要將其顯示給用戶並在視圖中獲取代碼。

這裏是我的完整形式

class TmpForm(forms.ModelForm): 
    description = forms.ModelChoiceField(queryset=Positions.objects.all()) 
    class Meta: 
     model = TmpPlInvoice 
     exclude = ['net_amt', 'post_date', 'address', 'posted', 'voucher_date', 'particulars'] 

我有什麼 [IMG] http://i68.tinypic.com/zj89yx.jpg[/IMG] 目前的形式輸出 { 'voucher_id':u'3452345' , '說明':職位:高級工業化學品}

我不能使用這個'描述'。我需要保存英超工業化學品的代碼在我TmpForm

我需要什麼 [IMG] http://i66.tinypic.com/nh0x2a.jpg[/IMG]

需要的形式輸出 { 'voucher_id':u'3452345' , 'pos_code':0001 }

+0

真的需要你幫助的傢伙:(任何建議將盡。 – whatIf

+0

@ e4c5我已經發布我的完整形式。 – whatIf

+0

@ e4c5你的意思是返回obj.pos_code? – whatIf

回答

0

這個模型形式拯救了我的生命。 MyModelChoiceField類顯示標籤,但在後端發送id。

class MyModelChoiceField(forms.ModelChoiceField): 
    def label_from_instance(self, obj): 
     return obj.description 


class TmpFormm(forms.ModelForm): 
    pos_code = MyModelChoiceField(queryset=Positions.objects.all(), widget=forms.Select(attrs={'class': 'select2_single form-control', 'blank': 'True'})) 
相關問題