У меня был объект ‘NoneType’, не имеющий атрибута ‘groups’ в django

#python #html #django #forms #view

#python #HTML #django #формы #Вид

Вопрос:

Я новичок в django, у меня просто ошибка, AttributeError в / registro / объект ‘NoneType’ не имеет атрибута ‘groups’, но моя форма сохраняет все данные

views.py

 def register(request):
    if request.method == 'POST':
        form = CreateUserForm(request.POST)
        
        if form.is_valid():
            ui = User()
            ui.username = request.POST.get('username')
            ui.password = request.POST.get('password')
            ui.first_name = request.POST.get('first_name')
            ui.last_name = request.POST.get('last_name')
            ui.email = request.POST.get('email')
            # user = User.objects.create_user(username=username,first_name=first_name,last_name=last_name,email=email,password=password)
            user = ui.save()
            obj = User.objects.latest('id')
            cli = Client_profile_master()
            cli.first_name = request.POST.get('first_name')
            cli.last_name = request.POST.get('last_name')
            cli.email = request.POST.get('email')
            cli.mobile_no = request.POST.get('mobile')
            cli.address_1 = request.POST.get('address1')
            cli.address_2 = request.POST.get('address2')
            cli.image=request.FILES.get('image')
            cli.user=obj
            # emp.save()
            # client = Client_profile_master.objects.create(first_name=first_name,last_name=last_name,email=email,mobile=mobile,address1=address1,address2=address2,image=image,user=obj)
            cli.save()
            username = form.cleaned_data.get('username')
            group = Group.objects.get(name='Client')
            user.groups.add(group)

            messages.success(
                request, f'Account created successfully for {username} !!!')
            return redirect('login')
        else:
            return redirect('/')
    else:
        form = CreateUserForm()
    return render(request, 'sites/register.html', {'form': form})
 

Ответ №1:

Ошибка возникает для этой строки: user = ui.save() метод сохранения модели ничего не возвращает (или возвращает None ), следовательно, значение user равно None . Простым решением было бы использовать ui.groups.add(group) .

Но вы можете значительно улучшить свою реализацию, используя формы, которые вы уже используете, а также добавляя новые. Например:

 # form
class CliForm(forms.ModelForm):
    class Meta:
      model = ClientProfileMaster # Using camelcase when declairing class name
      exclude = ["user",]

# view
form = CreateUserForm(request.POST)
cli_form = CliForm(request.POST, request.FILES)
if form.is_valid() and cli_form.is_valid():
    user = form.save()
    cli = cli_form.save(commit=False)
    cli.user = user
    cli.save()
 

Для получения дополнительной информации обратитесь к документации django modelform.