Нужно получить id вместо выбранного значения в modelchoicefield 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’, ‘description’: должности: Premier Industrial Chemicals}

Я не могу использовать это «описание». Мне нужно сохранить код Premier Industrial Chemicals в моей TmpForm

Что мне нужно
[IMG] http://i66.tinypic.com/nh0x2a.jpg [/IMG]

Вывод требуемой формы
{‘voucher_id’: u ‘3452345’, ‘pos_code’: 0001}

1 ответ

  1. Эта модель спасла мне жизнь. Класс MyModelChoiceField показывает метку, но идентификатор отправки на серверной части.

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