У меня был объект NoneType без атрибутов group в django, когда я пытался сохранить пользователя - PullRequest
0 голосов
/ 13 июля 2020

Я новичок в django, у меня в админке есть три группы: Medico, Paciente, Administrador. У меня просто ошибка, у объекта AttributeError в / registro / 'NoneType' нет атрибутов 'groups', но моя форма сохраняет все данные

# Registro del Sistema
def home_registro(request):
    if request.method == 'POST':
        formulario = PacienteFormulario(request.POST)
        if formulario.is_valid():
            paciente = formulario.save()
            grupo = Group.objects.get(name='Paciente')
            paciente.groups.add(grupo)
            return render(request, 'home/home_confirmacion.html')
    else:
        formulario = PacienteFormulario()
        context = {
            'formulario': formulario
        }
        return render(request, 'home/home_registro.html', context)

form.py:

class PacienteFormulario(UserCreationForm):
    class Meta:
        model = User
        fields = ('username', 'first_name', 'last_name', 'email', 'password1', 'password2')
            
    def save(self, commit = True):
        user = super().save(commit = False)
        user.email = self.cleaned_data['email']
        user.first_name = self.cleaned_data['first_name']
        user.last_name = self.cleaned_data['last_name']
        if commit:
            user.save()

Ошибка:

line 35, in home_registro
    paciente.groups.add(grupo)
AttributeError: 'NoneType' object has no attribute 'groups'

Надеюсь, кто-нибудь мне поможет. Спасибо

1 Ответ

0 голосов
/ 13 июля 2020

Вы не вернули пользователя в методе save:

class PacienteFormulario(UserCreationForm):
    class Meta:
        model = User
        fields = ('username', 'first_name', 'last_name', 'email', 'password1', 'password2')
            
    def save(self, commit = True):
        user = super().save(commit = False)
        user.email = self.cleaned_data['email']
        user.first_name = self.cleaned_data['first_name']
        user.last_name = self.cleaned_data['last_name']
        if commit:
            user.save()
        <b>return user</b>

Но обычно вам не нужно переопределять save(…) здесь, обычно ModelForm - а UserCreationForm - это a ModelForm - справится с этим.

...