Python 如何在Django表单中编辑选择选项值?

Python 如何在Django表单中编辑选择选项值?,python,django,Python,Django,我想在django表单中编辑选择选项值。 现在,select中选项的值是相关变量的id models.py class ReceiptDetail(models.Model): variant = models.ForeignKey('ProductVariant') forms.py class ReceiptDetailForm(forms.ModelForm) class Meta: model = ReceiptDetail fi

我想在django表单中编辑选择选项值。 现在,select中选项的值是相关变量的id

models.py

class ReceiptDetail(models.Model):
    variant = models.ForeignKey('ProductVariant')
forms.py

class ReceiptDetailForm(forms.ModelForm)    
    class Meta:
        model = ReceiptDetail
        fields = ['product_id', 'variant', 'size', 'quantity', 'price']
“variant”上选择的结果html:

<option value="" selected="selected">---------</option>
<option value="98">Charm I (Charm I)</option>
<option value="97">Small potion V (Small potion V)</option>
<option value="90">Big potion V (Big potion V)</option>
<option value="100">Charm III (Charm III)</option>
<option value="93">Small potion I (Small potion I)</option>
<option value="94">Small potion II (Small potion II)</option>
<option value="81">Colorfully (Colorfully)</option>

这将更改的值,而不是它的相关值。

我认为您应该在表单中定义的
字段中排除
变量
,并在表单
\uuuuu init\uuu
方法中执行某些操作:

class ReceiptDetailForm(forms.ModelForm)    
    class Meta:
        model = ReceiptDetail
        fields = ['product_id', 'size', 'quantity', 'price']

    def __init__(self, *args, **kwargs):
        super(ReceiptDetailForm, self).__init__(*args, **kwargs)
        # this is pseudo code but you should get all variants
        # then get the product related to each variant
        variants = Variant.objects.all()
        products = [(i.product.id, i.product.name) for i in variants]
        self.fields['product'] = forms.ChoiceField(choices=products)

这是一种常见的技术,请参见其他一些。

我认为您应该在表单中定义的
字段中排除
变量
,并使用表单
\uuuu init\uuu
方法执行操作:

class ReceiptDetailForm(forms.ModelForm)    
    class Meta:
        model = ReceiptDetail
        fields = ['product_id', 'size', 'quantity', 'price']

    def __init__(self, *args, **kwargs):
        super(ReceiptDetailForm, self).__init__(*args, **kwargs)
        # this is pseudo code but you should get all variants
        # then get the product related to each variant
        variants = Variant.objects.all()
        products = [(i.product.id, i.product.name) for i in variants]
        self.fields['product'] = forms.ChoiceField(choices=products)

这是一种常见的技术,看看其他的吧。

你也可以这样做:
self.fields['product'].choices=products
你也可以这样做:
self.fields['product'].choices=products