Ошибка: объект "Пользователь" не имеет атрибута "получить" при попытке доступа к текущему пользователю в ModelForms для раскрывающегося списка ModelChoiceField
Так что ниже views.py
и я пытаюсь загрузить представление с моделью. И в рамках модели формы мне нужно загрузить modelchoicefield
в зависимости от текущего пользователя, вошли в систему и попробовали приведенное ниже решение (проверьте forms.py
. Когда я запускаю его, я получаю
Attribute Error :object has no attribute 'get'
Помощь высоко ценится, в stackru ничего нет.
views.py:
class HomeView(View):
def get(self, request, *args, **kwargs):
form=PreDataForm(request.user)
return render(request, 'mainlist.html',
{ "form":form,
})
models.py:
class PreData(models.Model):
journalname = models.CharField(max_length=400, blank=False, null=True, default='')
forms.py:
class PreDataForm(forms.ModelForm):
journalname = forms.ModelChoiceField(required=True)
class Meta:
model=PreData
fields=['journalname']
def __init__(self,user, *args, **kwargs):
super(PreDataForm, self).__init__(user, *args, **kwargs)
self.fields["journalname"].queryset = Journals.objects.filter(journalusername=user)
HTML-файл:
{% extends 'home-base.html' %}
{% load crispy_forms_tags %}
{% block title %}
Welcome to Metrics - JSM
{% endblock %}
{% block content %}
<div class="col-md-9 col-centered" >
<div class="backeffect" >
{% if data %}
{% else %}
<b>Seems you are first time around here, Why not <b>{% include 'modal_first_stage.html' %}</b> to get started? :)</b>
{% endif %}
{% endblock %}
1 ответ
Решение
ModelForm
не берет user
, Вы должны удалить его из вашего super()
вызов.
def __init__(self, user, *args, **kwargs):
super(PreDataForm, self).__init__(*args, **kwargs)
self.fields["journalname"].queryset = Journals.objects.filter(journalusername=user)
Немного более многократно используемая версия, которая будет работать с общими представлениями создания / обновления:
def __init__(self, *args, **kwargs):
user = kwargs.pop('user')
super(PreDataForm, self).__init__(*args, **kwargs)
self.fields["journalname"].queryset = Journals.objects.filter(journalusername=user)