Почему я получаю AttributeError в / taxpayer / объекте «RelatedManager» не имеет атрибута «сохранить»? - PullRequest
1 голос
/ 17 марта 2020

ТЕЛО ОШИБКИ:

System check identified 1 issue (0 silenced).
March 18, 2020 - 01:18:12
Django version 2.2, using settings 'gst.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CONTROL-C.

22222
yesssssssssss
5356jk
**** True
_   -----
Internal Server Error: /taxpayer/
Traceback (most recent call last):
File "/home/somnath/env1/lib/python3.6/site-packages/django/core/handlers/exception.py", line 34,in inner
response = get_response(request)
File "/home/somnath/env1/lib/python3.6/site-packages/django/core/handlers/base.py", line 115, in _get_response
response = self.process_exception_by_middleware(e, request)
File "/home/somnath/env1/lib/python3.6/site-packages/django/core/handlers/base.py", line 113, in _get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "/home/somnath/env1/gst/accounts/views.py", line 28, in taxpayer_profile_view
user.save()
File "/home/somnath/env1/lib/python3.6/site-packages/django/contrib/auth/base_user.py", line 66, in save
super().save(*args, **kwargs)
File "/home/somnath/env1/lib/python3.6/site-packages/django/db/models/base.py", line 741, in save
force_update=force_update, update_fields=update_fields)
File "/home/somnath/env1/lib/python3.6/site-packages/django/db/models/base.py", line 790, in save_base
update_fields=update_fields, raw=raw, using=using,
File "/home/somnath/env1/lib/python3.6/site-packages/django/dispatch/dispatcher.py", line 175, in send
for receiver in self._live_receivers(sender)
File "/home/somnath/env1/lib/python3.6/site-packages/django/dispatch/dispatcher.py", line 175, in <listcomp>
for receiver in self._live_receivers(sender)
File "/home/somnath/env1/gst/accounts/models.py", line 44, in save_user_profile
instance.taxpayer_profile.save()
AttributeError: 'RelatedManager' object has no attribute 'save'
[18/Mar/2020 01:19:57] "POST /taxpayer/ HTTP/1.1" 500 97850

Файл views.py:

from django.contrib.auth import login
from django.shortcuts import redirect, render
from django.http import HttpResponse, HttpResponseRedirect
from django.views.generic import CreateView
from .forms import OfficialProfileForm, TaxpayerProfileForm, UserForm
from .models import User, TaxpayerProfile, OfficialProfile

def taxpayer_profile_view(request):
    if request.method == 'POST':
        print("22222")
        user_form = UserForm(request.POST)
        taxpayer_profile_form = TaxpayerProfileForm(request.POST)
        #print(user_form.data['name'])
        if user_form.is_valid() is not None:
            print("yesssssssssss")
            user=User()
            user.first_name=user_form.data['first_name']
            user.last_name=user_form.data['last_name']
            user.username=user.first_name+user.last_name
            user.email=user_form.data['email']
            user.password=user_form.data['password']
            user.is_taxpayer=True
            tax=TaxpayerProfile()
            tax.user=user
            tax.aadhar=taxpayer_profile_form.data['aadhar']
            user.gstin=tax.aadhar+user.first_name[0:2]
            print(user.gstin)
            user.save()
            tax.save()
            print(tax.user.email)
            return HttpResponse('thanks')

        else:
            print("noooooooooo")
            user_form = UserForm()
            taxpayer_profile_form = TaxpayerProfileForm()
            return render(request, 'accounts/taxpayer_profile.html', {'user_form':user_form, 'taxpayer_profile_form':taxpayer_profile_form})

    else:
        #print("1111")
        user_form = UserForm()
        taxpayer_profile_form = TaxpayerProfileForm()
        return render(request, 'accounts/taxpayer_profile.html', {'user_form':user_form, 'taxpayer_profile_form':taxpayer_profile_form})


def official_profile_view(request):
    if request.method == 'POST':
        #print("22222")
        user_form = UserForm(request.POST)
        official_profile_form = OfficialProfileForm(request.POST)
        if user_form.is_valid() is not None :

            #print("yesssssssssss")
            user=User()
            user.name=user_form.data['username']
            user.email=user_form.data['email']
            user.password=user_form.data['password']
            user.is_official=True
            user.save()
            official=OfficialProfile()
            official.user=user
            official.aadhar=official_profile_form.data['aadhar']
            official.uid=uid
            official.save()
            user.gstin=official.aadhar+official.name[0:2]
            #print(tax.user.email)
            user.save()
            return HttpResponse('thanks')

        else:
            #print("noooooooooo")
            user_form = UserForm()
            official_profile_form = OfficialProfileForm()
            return render(request, 'accounts/official_profile.html', {'user_form':user_form, 'official_profile_form':official_profile_form})

    else:
        #print("1111")
        user_form = UserForm()
        official_profile_form = OfficialProfileForm()
        return render(request, 'accounts/official_profile.html', {'user_form':user_form, 'official_profile_form':official_profile_form})

Файл models.py:

from django.db import models
from django.contrib.auth.models import AbstractUser
from django.db.models.signals import post_save
from django.dispatch import receiver

# Create your models here.

class User(AbstractUser):
    is_taxpayer = models.BooleanField(default=False)
    is_official = models.BooleanField(default=False)
    first_name = models.CharField(max_length=200, unique=True)
    last_name = models.CharField(max_length=200, unique=True)
    email = models.EmailField(max_length=200, unique=True)
    gstin = models.CharField(max_length=200, unique=True, null=True)
    password = models.CharField(max_length=200, unique=True)
    #USERNAME_FIELD = 'gstin'


class TaxpayerProfile(models.Model):
    user = models.ForeignKey(User, on_delete=models.CASCADE, unique=True,primary_key=True, related_name='taxpayer_profile')
    aadhar = models.DecimalField(max_digits=12, decimal_places=0, unique=True, null=True)
    #USERNAME_FIELD = 'gstin'


class OfficialProfile(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE, primary_key=True,  related_name='official_profile')
    aadhar = models.BigIntegerField(null=True,unique=True)
    uid = models.CharField(max_length=200)
    #USERNAME_FIELD = 'uid'

forms.py file:

from django import forms
from .models import User, TaxpayerProfile, OfficialProfile
import re
class UserForm(forms.ModelForm):
    first_name = forms.CharField(max_length=200)
    last_name = forms.CharField(max_length=200)
    email = forms.EmailField()
    password = forms.CharField(widget=forms.PasswordInput)
    class Meta:
        model = User
        fields = ['first_name', 'last_name', 'email', 'password']
        widgets = {
            'password': forms.PasswordInput()
        }
class TaxpayerProfileForm(forms.ModelForm):
    class Meta:
        model = TaxpayerProfile
        fields = ['aadhar']

class OfficialProfileForm(forms.ModelForm):
    class Meta:
        model = OfficialProfile
        fields = ['aadhar', 'uid']

У меня два основных типа пользователей: налогоплательщик и официальный. Поэтому я построил соответствующие модели. Поле gstin создается путем объединения aadhar и первых 2 букв имени. Основная проблема в функции сохранения, и я не могу выяснить источник. Пожалуйста, помогите мне.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...