【发布时间】:2023-03-15 19:01:01
【问题描述】:
所以我有这个作为我的views.py:
from django.shortcuts import render, redirect
from django.contrib.auth import login, authenticate, logout
from account.forms import RegistrationForm, AccountAuthenticationForm, AccountUpdateForm
from framework.models import Company
# Create your views here.
def registration(request):
context = {}
user = request.user
if user.is_authenticated:
return redirect("index")
if request.POST:
updated_request = request.POST.copy()
for entity in Company.objects.all():
if entity in Company.objects.all():
updated_request['company'] = Company.objects.get_or_create(entity)[0]
form = RegistrationForm(updated_request)
if form.is_valid():
form.save()
username = form.cleaned_data.get('username')
email = form.cleaned_data.get('email')
first_name = form.cleaned_data.get('first_name')
last_name = form.cleaned_data.get('last_name')
raw_password = form.cleaned_data.get('password1')
address1 = form.cleaned_data.get('address1')
address2 = form.cleaned_data.get('address2')
city = form.cleaned_data.get('city')
state = form.cleaned_data.get('state')
zipcode = form.cleaned_data.get('zipcode')
account = authenticate(username=username,password=raw_password)
return redirect('index')
else:
context['registration_form'] = form
else:
form = RegistrationForm()
context['registration_form'] = form
return render(request, 'account/register.html' , context)
我正在尝试以文本形式获取用户的输入并将其与数据库进行比较以选择他们正在工作的公司,我还将添加一个 else 语句,如果该语句是确切的还不存在。
我知道这意味着用户可以不断地创建新公司,但这不是问题,因为所有帐户在激活之前都会经过人工审核,所以如果有人打错或与确切命名略有偏差,我们正在为他们的公司使用它会在出现任何错误之前被捕获。
至于我的模型,这是他们的代码:
account/models.py
from framework.models import Company
from django.contrib.auth.models import AbstractBaseUser, BaseUserManager
# ...
class Account(AbstractBaseUser):
username = models.CharField(max_length=32, unique=True)
email = models.EmailField(verbose_name='email', max_length=64, unique=True)
first_name = models.CharField(max_length=32)
last_name = models.CharField(max_length=32)
address1 = models.CharField(max_length=512)
address2 = models.CharField(max_length=64, blank=True)
city = models.CharField(max_length=128)
state = models.CharField(max_length=8)
zipcode = models.CharField(max_length=5)
country = models.CharField(max_length=128, default="US")
company = models.ForeignKey(Company,related_name="employees",null=True,blank=True,on_delete=models.CASCADE)
date_joined = models.DateTimeField(verbose_name='date joined', auto_now_add=True)
last_login = models.DateTimeField(verbose_name='last login', auto_now=True)
is_admin = models.BooleanField(default=False)
is_active = models.BooleanField(default=False)
is_staff = models.BooleanField(default=False)
is_superuser = models.BooleanField(default=False)
USERNAME_FIELD = 'username'
REQUIRED_FIELDS = ['email','company', 'first_name','last_name', 'address1', 'city', 'state', 'zipcode']
objects = MyAccountManager()
def __str__(self):
return self.username
def has_perm(self, perm, obj=None):
return self.is_admin
def has_module_perms(self, app_label):
return True
framework/models.py
class Company(models.Model):
name = models.CharField(max_length=256)
def __str__(self):
return self.name
因此,我需要帮助将它放到用户可以输入公司名称的位置,它会搜索现有公司的列表,并将其公司设置为现有公司或创建新公司。
我收到的主要错误代码是:无法分配"'Company object (1)'": "Account.company" must be a "Company" instance.
如果您需要任何其他信息,请通过我的方式发送消息。
【问题讨论】:
标签: python python-3.x django django-models django-forms