需要在modelchoicefield django中获取id而不是选定的值

时间:2016-10-03 15:16:03

标签: django django-models django-forms django-views

这是一个非常非常基本的问题,我已经搜索并尝试了很多方法来做到这一点,但我想知道这个好的做法/最好的方法。

我正在尝试从另一个表中存储用户选择的代码。想要的是

一个模型表单组合框,显示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','description':职位:Premier Industrial Chemicals}

我不能使用这个'描述'。我需要在我的TmpForm中保存Premier Industrial Chemicals的代码

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

所需的表单输出 {'voucher_id':u'3452345','pos_code':0001}

1 个答案:

答案 0 :(得分: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'}))