python - 如何编辑 Django 表单中的选择选项值?

标签 python django

我想在我的 Django 表单中编辑选择选项值。 现在 select 中 option 的值是相关的 variant_id。

模型.py

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

表单.py

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

从“变体”上选择的结果 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>

请注意,每个选项的值都是 VARIANT id。我想将该值更改为 PRODUCT id(与变体相关)。

我猜小部件是答案,但我不知道如何访问选择对象内的选项属性。这是我尝试过的:

小部件.py:

class VariantIDWidget(forms.widgets.Select):

    def __init__(self, *args, **kwargs):
        super(VariantIDWidget, self).__init__(*args, **kwargs)

    def render(self, name, value, attrs=None):
        out = super(VariantIDWidget, self).render(name, value,
            attrs={'value': 'test'})
        return out

这会改变<\select>的值,而不是它相关的<\options>。

最佳答案

我认为您应该排除表单中定义的 fields 中的 variant,并在表单 __init__ 方法中执行一些操作:

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)

这是一种常见的技术,请参阅其他一些 SO questions .

关于python - 如何编辑 Django 表单中的选择选项值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33743836/

相关文章:

python - `setData` 方法怎么会失败?

python - Python中稀疏LIL矩阵中的求和行运算极其缓慢

python - 在tastypie中动态创建多个django模型的资源

python - 表 thumbnail_kvstore 不存在

jquery - Django - CreateView 不保存带有嵌套表单集的表单

mysql - 在查询参数中跟踪关系还是在 Django 模型中使用模型属性查找更快?

python - 为什么 uwsgi 找不到使用 --user 安装的 python 包?

python - 循环浏览页面总是得到相同的结果

python - 我可以在本地类中使用导入模块中的函数吗? (Python)

javascript - Django 不为 AngularJS 前端提供 CSRF token