首页 > 解决方案 > 如何解决属性错误'QueryDict'对象没有属性'company'?

问题描述

我想让一个用户可以创建另一个用户。我为此创建了一个表格。一开始它工作得很好,但后来我改变了一些东西,现在它不工作了,表单没有保存。我试图找出错误在哪里,但我找不到。我该如何解决?

注意:comp_name是一个隐藏字段,所以用户不应该看到它

/signup/ 'QueryDict' 对象的 AttributeError 没有属性 'company'

视图.py

def signup(request):
    current_user = request.user
    userP = UserProfile.objects.get_or_create(username=current_user)
    form_class = SignUpForm
    rank_form = RankForm(request.POST)
    if request.method == 'POST':
        form = SignUpForm(request.POST)
        if form.is_valid():

            user = form.save()
            user.refresh_from_db()  # load the profile instance created by the signal
            user.is_active = False
            rank_form = RankForm(instance=user, user=request.user)
            rank_form.save()
            if form.cleaned_data['password1'] != "":
                user.set_password(form.cleaned_data['password1'])
                user.save()
            return redirect('home')
    else:
        form = form_class()

    context = {
        'form': form,
        'rank_form': rank_form

    }

    return render(request, 'signup.html', context)

模型.py

class CompanyProfile(models.Model):
    comp_id = models.UUIDField(default=uuid.uuid4, editable=False, unique=True)
    comp_name = models.CharField(max_length=200)
    country = models.CharField(max_length=200, default='')


class Rank(models.Model):
    rank_name = models.CharField(max_length=200)
    company = models.ForeignKey(CompanyProfile, on_delete=models.CASCADE, null=True, unique=False)


class UserProfile(AbstractUser):

    company = models.ForeignKey(CompanyProfile, on_delete=models.CASCADE, null=True, unique=False)
    user_id = models.UUIDField(default=uuid.uuid4(), editable=False, unique=True)
    username = models.CharField(max_length=500, unique=True)
    first_name = models.CharField(max_length=200)
    last_name = models.CharField(max_length=200)
    password = models.CharField(max_length=250)
    email = models.EmailField(max_length=254)
    rank = models.ForeignKey(Rank, on_delete=models.CASCADE, null=True, unique=False, default='Analyst')
    image = models.ImageField(upload_to='profile_image', blank=True, null= True, default='profile.png')

表格.py

class SignUpForm(forms.ModelForm):
    password1 = forms.CharField(max_length=250, widget=forms.PasswordInput)
    password2 = forms.CharField(max_length=250, widget=forms.PasswordInput)

    class Meta:
        model = UserProfile
        fields = (
            'username', 'first_name', 'last_name', 'email', 'password1', 'password2',  'image')

    widgets = {
        'password1': forms.PasswordInput(),
        'password2': forms.PasswordInput(),
    }

追溯

Environment:


Request Method: POST
Request URL: http://127.0.0.1:8000/signup/

Django Version: 3.1.4
Python Version: 3.8.7
Installed Applications:
['django.contrib.admin',
 'django.contrib.auth',
 'django.contrib.contenttypes',
 'django.contrib.sessions',
 'django.contrib.messages',
 'django.contrib.staticfiles',
 'register',
 'customer',
 'financial_analysis',
 'ocr',
 'core',
 'approvals',
 'django_tables2',
 'crispy_forms',
 'ckeditor',
 'rest_framework',
 'requests',
 'bootstrap_modal_forms']
Installed Middleware:
['django.middleware.security.SecurityMiddleware',
 'django.contrib.sessions.middleware.SessionMiddleware',
 'django.middleware.common.CommonMiddleware',
 'django.middleware.csrf.CsrfViewMiddleware',
 'django.contrib.auth.middleware.AuthenticationMiddleware',
 'django.contrib.messages.middleware.MessageMiddleware',
 'django.middleware.clickjacking.XFrameOptionsMiddleware']



Traceback (most recent call last):
  File "C:\Users\USER\OneDrive\Documents\GitHub\otc\myvenv\lib\site-packages\django\core\handlers\exception.py", line 47, in inner
    response = get_response(request)
  File "C:\Users\USER\OneDrive\Documents\GitHub\otc\myvenv\lib\site-packages\django\core\handlers\base.py", line 179, in _get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
  File "C:\Users\USER\OneDrive\Documents\GitHub\otc\myvenv\lib\site-packages\django\contrib\auth\decorators.py", line 21, in _wrapped_view
    return view_func(request, *args, **kwargs)
  File "C:\Users\USER\OneDrive\Documents\GitHub\otc\myvenv\lib\site-packages\django\contrib\auth\decorators.py", line 21, in _wrapped_view
    return view_func(request, *args, **kwargs)
  File "C:\Users\USER\OneDrive\Documents\GitHub\otc\register\views.py", line 46, in signup
    rank_form = RankForm(request.POST)
  File "C:\Users\USER\OneDrive\Documents\GitHub\otc\register\forms.py", line 35, in __init__
    self.fields['rank'].queryset = models.Rank.objects.filter(company=user.company)

Exception Type: AttributeError at /signup/
Exception Value: 'QueryDict' object has no attribute 'company'

标签: pythondjango

解决方案


您的这些表格有冲突的字段。

form_class  #this one excluded 'company',

rank_form  # this one includes 'company'.

在 forms.py 的 form_class 字段中包含“公司”或在 rank_form 中使用排除字段


推荐阅读