Python 如何在Django表单中编辑选择选项值?
我想在django表单中编辑选择选项值。 现在,select中选项的值是相关变量的id models.pyPython 如何在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
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