【问题标题】:AttributeError: 'ModelFormOptions' object has no attribute 'private_fields' error messageAttributeError:“ModelFormOptions”对象没有属性“private_fields”错误消息
【发布时间】:2019-09-28 03:37:00
【问题描述】:

我不明白这个错误是什么意思。看来我做的一切都是正确的。

forms.py:

from django import forms

from django.forms import ModelForm

from .models import SignUpForm


class SignUpForm(forms.ModelForm):
    class Meta:
        model = SignUpForm
        fields = ['name', 'company', 'city', 'country', 'email', 'password']
        widgets = {
        'password': forms.PasswordInput(),
    }

这会抛出:

AttributeError: 'ModelFormOptions' 对象没有属性 'private_fields'

这是我的观点.py

from django.shortcuts import render

# Create your views here.
from django.http import HttpResponse
from .forms import signup
from django.utils.html import format_html
from django.contrib import messages
from .models import signup

def index(request):
    return render(request, 'myapp/index.html')

def signup(request):
    if request.method == 'POST':
        register_form = signup(request.POST)
        if register_form.is_valid():
            post = register_form.save()
            message = format_html("Hi {0}, Thank you for signing up with us! See your profile <a href=''>{1}</a>".format(register_form.cleaned_data['name'], "here"))
            form = signup()
            return render(request, 'myapp/register.html', {'signup':NewForm, 'message': message})
        else:
            message = register_form.errors
            form = signup()
            return render(request, 'myapp/register.html', {'signup':form, 'message': message})

    else:
        form = signup()

    return render(request, 'myapp/register.html', {'signup':form})

【问题讨论】:

  • 请分享从.models 导入的SignUpForm 的定义以及错误的完整堆栈跟踪。此外,将相同的类名用于两个不同的事物(forms.SignUpForm 和 models.SignUpForm)会遇到麻烦。
  • 请完整回溯..
  • 你确定需要PasswordInput()末尾的括号吗?
  • @JohnGordon 在这种情况下他不需要它们,但如果他确实初始化小部件不会引起任何问题。来自docs:The widgets dictionary accepts either widget instances (e.g., Textarea(...)) or classes (e.g., Textarea).

标签: python django django-models django-forms


【解决方案1】:

拥有一个名为 SignUpForm 的模型是一个非常糟糕的主意,原因有很多。通常以Form 结尾的类应该是表单类,而不是模型类。更重要的是,这很可能是您出错的原因。

在您的views.py 中,您可能正在做这样的事情:

from .models import SignUpForm
from .forms import SignUpForm

def some_view(request):
    if request.POST:
        form = SignUpForm(request.POST)
    else:
        form = SignUpForm(instance=SignUpForm(col1='foo', col2='bar'))

你猜怎么着?您刚刚将SignUpForm form 类的实例传递给您的SignUpForm,不是 SignUpForm model!

更改SignUpForm模型的名称,您很可能不会出错。

如果这没有帮助,请告诉我您的 views.py 以获取此表单。

【讨论】:

  • 嗨,Caleb,我尝试了您的建议,但没有成功。我在问题中发布了我的views.py。谢谢!
  • @wpnewbie 你没有尝试我的建议?您的模型、表单、和视图都具有相同的名称!请尝试更改这些名称,使它们都是唯一的,看看是否可行。
  • @wpnewbie 同样,在更改模型名称后,您将需要再次运行迁移。
猜你喜欢
  • 2015-05-01
  • 1970-01-01
  • 2018-05-21
  • 2018-10-04
  • 2017-07-22
  • 2021-03-18
  • 2020-07-08
  • 1970-01-01
  • 2023-03-22
相关资源
最近更新 更多