2016-01-07 5 views
0

Раньше я позволял пользователю выбирать из раскрывающегося списка цветов, но я бы предпочел выбрать один для них, поэтому я использовал следующий код, чтобы определить, какие цвета будут действительным выбором а затем случайным образом выбрал один. Я пытаюсь заставить его предварительно заполнить форму, и я получаю ошибку имени. Поцарапать мою голову, как сумасшедшую, потому что я проверил этот код, просто проложив choice в шаблон. Поэтому я знаю, что в этом контексте код функционировал правильно. Могу ли я не сделать то, что я сделал ниже?Prepopulate 1 поле формы, которое является внешним ключом

ошибка я получаю, когда я запускаю мой сервер 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) 
+0

Возможная Дубликат [Установка начального значения Джанго поля формы в \ _ \ _ INIT \ _ \ _ метод] (http://stackoverflow.com/questions/22390416/setting-initial-django-form-field -value-in-the-init-method) – binki

ответ

1

Вы не определили метод инициализации для этого кода, чтобы войти в, его просто константы выглядит чтение каждая строка индивидуально как декларация

Переведите свой код в метод 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 
+0

Грустно сказать, что я не понимаю, как применить эту помощь. Будет ли это проходить в классе или за его пределами? Вы не упомянули о том, когда я устанавливаю cur_jobs и all_colors. Могу я просто оставить это в классе, как у меня? –

+0

Все еще получаю ошибку: 'color = forms.CharField (initial = choice) NameError: name 'choice' не определен' –

+0

Я получаю, возможно, несколько несвязанную ошибку:' __init __() получил префикс неожиданного ключевого слова '' Это указывает на мое представление, которое имеет 'form = LimitedJobForm (request.POST или None, prefix = 'add')' Мне нужен префикс для дифференциации с другой аналогичной формой –

Смежные вопросы