Python Django AttributeError at/公司注册/

Python Django AttributeError at/公司注册/,python,django,Python,Django,我有一个用户模型、一个应用程序配置文件模型和一个CompanyProfile模型。用户可以是两种类型,申请者或公司。 型号.py class User(AbstractBaseUser): email = models.EmailField(max_length=255, unique=True) name = models.CharField(max_length=255) date_joined = models.DateTimeField(auto_now_add=

我有一个用户模型、一个应用程序配置文件模型和一个CompanyProfile模型。用户可以是两种类型,申请者或公司。 型号.py

class User(AbstractBaseUser):
    email = models.EmailField(max_length=255, unique=True)
    name = models.CharField(max_length=255)
    date_joined = models.DateTimeField(auto_now_add=True)
    is_applicant = models.BooleanField(default=False)
    is_company = models.BooleanField(default=False)
    is_active = models.BooleanField(default=True)
    is_staff = models.BooleanField(default=False)
    is_admin = models.BooleanField(default=False)

    USERNAME_FIELD = 'email'
    REQUIRED_FIELDS = ['name']

    objects = MyUserManager()

    def __str__(self):
        return self.email

    def has_perm(self, perm, obj=None):
        return True

    def has_module_perms(self, app_label):
        return True

class ApplicantProfile(models.Model):
    GENDER_MALE = 0
    GENDER_FEMALE = 1
    GENDER_CHOICES = [(GENDER_MALE, 'Male'), (GENDER_FEMALE, 'Female')]

    user = models.OneToOneField(User, null=True, on_delete=models.CASCADE)
    image = models.ImageField(upload_to=image_directory_path, storage=image_storage, null=True, blank=True)
    bio = models.TextField(max_length=500, null=True, blank=True)
    address = models.TextField(max_length=200, null=True, blank=True)
    birth_date = models.DateField(null=True, blank=True)
    phone = PhoneNumberField(null=True, blank=True)
    website = models.URLField(max_length=255, null=True, blank=True)
    gender = models.IntegerField(choices=GENDER_CHOICES, null=True, blank=True)
    interest = models.TextField(max_length=255, null=True, blank=True)
    linkedin = models.CharField(max_length=255, null=True, blank=True)
    github = models.CharField(max_length=255, null=True, blank=True)
    twitter = models.CharField(max_length=255, null=True, blank=True)
    facebook = models.CharField(max_length=255, null=True, blank=True)

    def __str__(self):
        return self.user.name

class CompanyProfile(models.Model):
    user = models.OneToOneField(User, null=True, on_delete=models.CASCADE)
    image = models.ImageField(upload_to=image_directory_path, storage=image_storage, null=True, blank=True)
    about = models.TextField(max_length=500, null=True, blank=True)
    location = models.CharField(max_length=100, null=True, blank=True)
    start_date = models.DateField(null=True, blank=True)
    website = models.URLField(max_length=255, null=True, blank=True)
    logo = models.ImageField(upload_to=image_directory_path, storage=image_storage, null=True, blank=True)

    def __str__(self):
        return self.user.name
def applicant_register(request):
    if request.method == 'POST':
        form = ApplicantRegistrationForm(request.POST)
        if form.is_valid():
            form.save()
            email = form.cleaned_data.get('email')
            raw_password = form.cleaned_data.get('password1')
            user = authenticate(email=email, password=raw_password)
            ApplicantProfile.objects.create(user=user)
            messages.success(request, "Account created successfully.")
            return redirect('applicant-feed')

    form = ApplicantRegistrationForm()
    context = {
        "form": form
    }
    return render(request, 'user/applicant/applicant-register.html', context)

def company_register(request):
    if request.method == 'POST':
        form = CompanyRegistrationForm(request.POST)
        if form.is_valid():
            form.save()
            email = form.cleaned_data.get('email')
            raw_password = form.cleaned_data.get('password1')
            user = authenticate(email=email, password=raw_password)
            CompanyProfile.objects.create(user=user)  # This line gives the error
            messages.success(request, "Account created successfully.")
            return redirect('company-feed')

    form = CompanyRegistrationForm()
    context = {
        "form": form
    }
    return render(request, 'user/company/company-register.html', context)
我有两个URL来创建两种不同类型的用户。我可以在用户从申请者注册url注册后立即自动创建申请者,但我不能从公司注册url创建公司

视图.py

class User(AbstractBaseUser):
    email = models.EmailField(max_length=255, unique=True)
    name = models.CharField(max_length=255)
    date_joined = models.DateTimeField(auto_now_add=True)
    is_applicant = models.BooleanField(default=False)
    is_company = models.BooleanField(default=False)
    is_active = models.BooleanField(default=True)
    is_staff = models.BooleanField(default=False)
    is_admin = models.BooleanField(default=False)

    USERNAME_FIELD = 'email'
    REQUIRED_FIELDS = ['name']

    objects = MyUserManager()

    def __str__(self):
        return self.email

    def has_perm(self, perm, obj=None):
        return True

    def has_module_perms(self, app_label):
        return True

class ApplicantProfile(models.Model):
    GENDER_MALE = 0
    GENDER_FEMALE = 1
    GENDER_CHOICES = [(GENDER_MALE, 'Male'), (GENDER_FEMALE, 'Female')]

    user = models.OneToOneField(User, null=True, on_delete=models.CASCADE)
    image = models.ImageField(upload_to=image_directory_path, storage=image_storage, null=True, blank=True)
    bio = models.TextField(max_length=500, null=True, blank=True)
    address = models.TextField(max_length=200, null=True, blank=True)
    birth_date = models.DateField(null=True, blank=True)
    phone = PhoneNumberField(null=True, blank=True)
    website = models.URLField(max_length=255, null=True, blank=True)
    gender = models.IntegerField(choices=GENDER_CHOICES, null=True, blank=True)
    interest = models.TextField(max_length=255, null=True, blank=True)
    linkedin = models.CharField(max_length=255, null=True, blank=True)
    github = models.CharField(max_length=255, null=True, blank=True)
    twitter = models.CharField(max_length=255, null=True, blank=True)
    facebook = models.CharField(max_length=255, null=True, blank=True)

    def __str__(self):
        return self.user.name

class CompanyProfile(models.Model):
    user = models.OneToOneField(User, null=True, on_delete=models.CASCADE)
    image = models.ImageField(upload_to=image_directory_path, storage=image_storage, null=True, blank=True)
    about = models.TextField(max_length=500, null=True, blank=True)
    location = models.CharField(max_length=100, null=True, blank=True)
    start_date = models.DateField(null=True, blank=True)
    website = models.URLField(max_length=255, null=True, blank=True)
    logo = models.ImageField(upload_to=image_directory_path, storage=image_storage, null=True, blank=True)

    def __str__(self):
        return self.user.name
def applicant_register(request):
    if request.method == 'POST':
        form = ApplicantRegistrationForm(request.POST)
        if form.is_valid():
            form.save()
            email = form.cleaned_data.get('email')
            raw_password = form.cleaned_data.get('password1')
            user = authenticate(email=email, password=raw_password)
            ApplicantProfile.objects.create(user=user)
            messages.success(request, "Account created successfully.")
            return redirect('applicant-feed')

    form = ApplicantRegistrationForm()
    context = {
        "form": form
    }
    return render(request, 'user/applicant/applicant-register.html', context)

def company_register(request):
    if request.method == 'POST':
        form = CompanyRegistrationForm(request.POST)
        if form.is_valid():
            form.save()
            email = form.cleaned_data.get('email')
            raw_password = form.cleaned_data.get('password1')
            user = authenticate(email=email, password=raw_password)
            CompanyProfile.objects.create(user=user)  # This line gives the error
            messages.success(request, "Account created successfully.")
            return redirect('company-feed')

    form = CompanyRegistrationForm()
    context = {
        "form": form
    }
    return render(request, 'user/company/company-register.html', context)
感谢您的帮助。
您不需要使用该表单,因为您可以直接向任何类似此函数的模型创建帐户

def company_register(request):
if request.method == 'POST':
    user = request.POST['user']
    image = request.FILES['image']
    about = request.POST['about']
    location = request.POST['location']
    start_date = request.POST['start_date']
    website = request.POST['website']
    logo = request.FILES['logo']

    profile = CompanyProfile.objects.create(user=user, image=image, about=about, location=location, start_date=start_date, website=website, logo=logo)
    profile.save()
    return Response('Done')
else:
    return Response('POST method only accepted')
       

根据error,看起来
CompanyProfile
不是一个模型类,而是另一个类。是否有可能在views.py中重新定义它?可能您也用这个名称定义了一个视图?

我用相同的名称定义了我的视图和模型。后来我注意到了。谢谢你的帮助。当然,很高兴这对你有帮助:)