python - 如何解决属性错误'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'
解决方案
您的这些表格有冲突的字段。
form_class #this one excluded 'company',
rank_form # this one includes 'company'.
在 forms.py 的 form_class 字段中包含“公司”或在 rank_form 中使用排除字段
推荐阅读
- javascript - 为什么银行支付验证系统使用 JavaScript 重定向
- javascript - 使用来自另一个通过 ID 链接的数据更新一个 JSON blob 中的数据元素
- elixir - Ecto - 按月访问日期时间字段
- smtp - DNN 9 SMTP 用户名和密码已自动更改
- c# - 如何使用 C# MongoDB.Driver 更新深度嵌套的数组?
- spring - @Controller Kafka Listener 异常未被异常处理程序 @ControllerAdvice 捕获
- google-app-engine - Google App 引擎上的生产部署问题
- python - Python:在句子列表中查找常见句子片段
- css - 带有 CSS 和媒体查询的浮动文本容器
- javascript - 在触摸设备上平移视口