#django #django-forms #jquery-select2 #django-crispy-forms #django-autocomplete-light
#django #django-forms #jquery-select2 #django-crispy-forms #django-autocomplete-light
Вопрос:
Я хочу добавить другое поле автозаполнения в мою model.form.
Однако, как только я добавлю виджет автозаполнения для поля «projektnummer»
'projektnummer': autocomplete.ModelSelect2(url='output:projekt-form-autocomplete'),
Я получаю ошибку проводного шаблона, которую я не могу понять. У вас есть какие-нибудь идеи, что я могу здесь сделать?
Большое вам спасибо! 🙂
сообщение об ошибке:
AttributeError at /output/create/
'list' object has no attribute 'queryset'
Request Method: GET
Request URL: http://127.0.0.1:8000/output/create/
Django Version: 1.8.7
Exception Type: AttributeError
Exception Value:
'list' object has no attribute 'queryset'
Error during template rendering
In template /home/bjoern/Developement/Django/Outputmeldetool/venv_outputmeldetool/lib/python3.5/site-packages/crispy_forms/templates/bootstrap3/field.html, error at line 28
28 {% if field|is_checkbox and form_show_labels %}
forms.py
class KombiPublikationForm(forms.ModelForm):
typtyp = forms.ModelChoiceField(label='Vorauswahl Outputtyp', required = False,
queryset=KombiPublikationsTypTyp.objects.exclude(id__in=EXCLUDED_TYPTYP)
)
class Meta:
model = KombiPublikation
exclude = ['pub_sprache']
widgets = {
'freigabe': DateTimePicker(options={"format": "YYYY-MM-DD HH:mm", 'sideBySide': True}),
'typid': autocomplete.ModelSelect2(url='output:typ-autocomplete', forward=['typtyp']),
#adding following line generates the error:
'projektnummer': autocomplete.ModelSelect2(url='output:projekt-form-autocomplete'),
'monat': forms.NumberInput(),
}
def __init__(self, *args, **kwargs):
super(KombiPublikationForm, self).__init__(*args, **kwargs)
self.helper = FormHelper()
self.helper.help_text_inline = True
self.helper.form_tag = False
self.helper.layout = Layout(
#a lot of layout stuff is here
)
Редактировать:
Я получаю то же самое сообщение об ошибке с уменьшенной формой теста без хрустящих форм. Просто обычная форма модели и один виджет автозаполнения. Таким образом, он, похоже, не связан с crispy forms, но связан с виджетом автозаполнения.
class TestPublikationForm(forms.ModelForm):
class Meta:
model = KombiPublikation
exclude = ['pub_sprache']
widgets = {
'projektnummer': autocomplete.ModelSelect2(url='output:projekt-form-autocomplete'),
}
template.html
{{ form }}
ошибка:
Exception Value: 'list' object has no attribute 'queryset'
Комментарии:
1. Можете ли вы вставить полную обратную трассировку?
2. конечно — я разместил это как дополнительный ответ, так как он слишком длинный. спасибо вам за то, что вы изучили это! 🙂
Ответ №1:
Вы не опубликовали свои модели, но я предполагаю, что проблема может заключаться в том, что поле, которое вы пытаетесь заполнить автоматически, не является полем ForeignKey или ManyToMany, а чем-то вроде CharField или IntegerField.
Если вы хотите использовать его таким образом, вы можете сделать то, что предложил Алекс. В противном случае вам нужно будет сменить свои модели.
Ответ №2:
У меня была такая же проблема при применении к django-taggit. Я изменил виджеты формы на ListSelect2 или TagSelect2. И тогда это работает.
class TestPublikationForm(forms.ModelForm):
class Meta:
model = KombiPublikation
exclude = ['pub_sprache']
widgets = {
'projektnummer': autocomplete.ListSelect2(url='output:projekt-form-autocomplete'),
}
Вы можете найти дополнительные ресурсы в модуле реализации виджета Select2. ‘ :
http://django-autocomplete-light.readthedocs.io/en/master/api.html#module-dal.widgets