【问题标题】:How to set choices in dynamic with Django choicefield?如何使用 Django 选择域动态设置选择?
【发布时间】:2013-09-12 18:03:05
【问题描述】:

我想动态设置选项。

我使用了 __set_choices 方法,但是当请求方法是 POST 时, is_valid 方法总是返回 False。

如果 request.method=='POST': _form = MyForm(request.POST) 如果 _form.is_valid(): #做某事

【问题讨论】:

  • 什么是“__set_choices 方法”?它有什么作用?什么叫它?你的表格是什么?

标签: python django


【解决方案1】:

我经常在构造函数中动态设置选项:

class MyForm(BaseForm):
    afield = forms.ChoiceField(choices=INITIAL_CHOICES)

    def __init__(self, *args, **kwargs):
        super(MyForm, self).__init__(*args, **kwargs)
        self.fields['afield'].choices = my_computed_choices

【讨论】:

  • 谢谢,不错的解决方案,也易于实施。
【解决方案2】:

关键是要意识到choices 可以是任何可迭代的:

import uuid
from itertools import count
class MyForm(BaseForm):

    counter = count(1)

    @staticmethod
    def my_choices():
        yield (uuid.uuid1, next(counter)) 

    afield = forms.ChoiceField(choices=my_choices)

或者你喜欢my_choices里面的任何逻辑。

【讨论】:

    【解决方案3】:

    在视图中您可以执行以下操作

    --views.py

    lstChoices = _getMyChoices()
    
    form.fields['myChoiceField'].choices = lstChoices
    

    其中 lstChoices 是动态生成的元组列表供您选择。

    【讨论】:

    • 是的,但是表单验证仍然失败。 (django 1.8)
    【解决方案4】:

    类似于 maersu 的解决方案,但如果您有一个 ModelForm,其中一个模型具有另一个模型的 ForeignKey,您可能希望分配给该字段的查询集而不是选择。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-05-02
      • 2018-02-28
      • 2012-12-04
      • 1970-01-01
      • 2012-09-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多