帮助form.py中的lambda

时间:2011-07-07 10:40:48

标签: django django-forms

我有一个选择框,其中包含一个名为“Event”的模型。在我的生产服务器上,结果得到了控制。

我在每个请求中都需要此选择框中所有事件的最新版本。我在#django问过,有人说我应该用lambda。我用lambda尝试了这个但是它不起作用。当我添加新事件时,仍然会获得旧值,只有apache重新启动才能显示最新版本。

我的代码有问题吗?

#forms.py

events = lambda : [(e.id, e.title) for e in Event.objects.all().order_by('-date')]

class EventForm(Form):
    event_title = ChoiceField(label='Veranstaltung', choices=events())

2 个答案:

答案 0 :(得分:1)

Grrr ...评论框给了我很少的编辑空间。我会在这里试试:

解决方法是使用表单的__init__,即

class EventForm(Form):
    event_title = ChoiceField(label='Veranstaltung', choices=[])

    def __init__(self, *args, **kwargs):
        super(EventForm, self).__init__(*args, **kwargs)
        self.fields['events'].choices = [(e.id, e.title) for e in Event.objects.all().order_by('-date')]

顺便问一下,您考虑使用ModelChoiceField吗?

答案 1 :(得分:0)

此答案无效,请参阅评论

你正在评估lambda,使它无用。

像这样放下括号:

event_title = ChoiceField(label='Veranstaltung', choices=events)
祝你好运!