【问题标题】:Prepopulate 1 form field that is a foreign key预填充 1 个作为外键的表单字段
【发布时间】:2016-01-07 13:58:00
【问题描述】:

以前我让用户从下拉列表中选择颜色,但我宁愿为他们选择一种,所以我使用以下代码来确定哪些颜色是有效的选择,然后随机选择一种。我试图让它预先填充到表单中,但我收到了一个名称错误。疯狂地抓挠我的头,因为我已经通过简单地将choice 输入模板来测试此代码。所以我知道代码在这种情况下可以正常运行。我不能做我在下面做过的事情吗?

我在启动服务器时遇到的错误是 Name Error: name 'cur_colors' [at the list comprehension line] is not defined 但它显然是...

class LimitedJobForm(forms.ModelForm):
    jobnum = forms.CharField(label='Job Number')
    #get colorchoice
    cur_jobs = Job.objects.filter(enddate__gte=(datetime.date.today()-timedelta(days=7)))
    all_colors = Color.objects.all()
    cur_colors = []
    for i in cur_jobs:
        cur_colors.append(i.color)
    aval_colors = [x for x in all_colors if x not in cur_colors]
    choice = random.choice(aval_colors)
    color = forms.CharField(initial=choice)

【问题讨论】:

标签: python django


【解决方案1】:

您还没有为这段代码定义一个 init 方法,因此它只是单独读取每一行作为声明

将您的代码移动到一个 init 方法中,它应该可以正常工作!

class LimitedJobForm(forms.ModelForm):

    jobnum = forms.CharField(label='Job Number')
    color = forms.CharField()

    def __init__(self, *args, **kwargs):
        super(LimitedJobForm, self).__init__(*args, **kwargs)
        cur_jobs = Job.objects.filter(enddate__gte=(datetime.date.today()-timedelta(days=7)))
        all_colors = Color.objects.all()
        cur_colors = []
        for i in cur_jobs:
            cur_colors.append(i.color)
        aval_colors = [x for x in all_colors if x not in cur_colors]
        choice = random.choice(aval_colors)
        self.fields['color'].initial = choice

【讨论】:

  • 很遗憾我不明白如何应用此帮助。这会在课堂内还是在课堂外?你没有提到我什么时候设置 cur_jobs 和 all_colors。我可以把它留在课堂上吗?
  • 还是报错:color = forms.CharField(initial=choice) NameError: name 'choice' is not defined
  • 我遇到了一个可能有点不相关的错误:__init__() got an unexpected keyword argument 'prefix' 这指向我的观点,其中有form = LimitedJobForm(request.POST or None, prefix='add') 我需要前缀来区分另一个类似的形式
  • @clickhere - 是的,抱歉再次忘记了对 super 的调用
  • 看起来这是解决方案:self.fields['color'].initial = choice
猜你喜欢
  • 1970-01-01
  • 2011-08-09
  • 1970-01-01
  • 1970-01-01
  • 2019-01-03
  • 1970-01-01
  • 2013-05-13
  • 2021-09-04
  • 1970-01-01
相关资源
最近更新 更多