Ошибка: объект "Пользователь" не имеет атрибута "получить" при попытке доступа к текущему пользователю в 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)
Другие вопросы по тегам