错误:"用户"对象在尝试访问模型选择字段下拉列表中的模型窗体中的当前用户时没有属性"get"



下面是views.py,我正在尝试使用模型形式加载视图。在模型表单中,我需要根据当前登录的用户加载modelchoicefield并尝试以下解决方案(检查forms.py .(当我运行它时,我得到

Attribute Error :object has no attribute 'get'

非常感谢帮助,堆栈溢出中没有任何内容。

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 %}

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)

最新更新