Рассмотрим следующий код:
class CandidateSignUpForm(forms.ModelForm):
first_name = forms.CharField(max_length=50, widget=forms.TextInput(attrs={'placeholder': 'Ime', 'class': 'validate'}))
last_name = forms.CharField(max_length=50, widget=forms.TextInput(attrs={'placeholder': _('Prezime'), 'class': 'validate'}))
class Meta:
model = User
fields = ('email', 'password', 'first_name', 'last_name')
widgets = {
'email': forms.EmailInput(
attrs = {
'placeholder': _('E-mail'),
'class': 'validate'
},
),
'password': forms.PasswordInput(
attrs = {
'placeholder': _('Lozinka'),
'class': 'validate'
},
),
}
def signup(self, user):
user.first_name = self.cleaned_data['first_name']
user.last_name = self.cleaned_data['last_name']
user.email = self.cleaned_data['email']
user.password = self.cleaned_data['password']
user.save()
candidate = Candidate()
candidate.user = user
candidate.save()
и мои models.py:
class User(AbstractUser):
is_candidate = models.BooleanField(default=True)
is_employer = models.BooleanField(default=False)
is_admin = models.BooleanField(default=False)
first_name = models.CharField(max_length=50, null=True)
last_name = models.CharField(max_length=50, null=True)
mobile = models.IntegerField(null=True, unique=True)
address = models.CharField(max_length=250, null=True)
def __str__(self):
return self.email
class Candidate(models.Model):
user = models.OneToOneField(
User, on_delete=models.CASCADE, primary_key=True
)
available_from = models.DateField(blank=True, null=True)
dob = models.PositiveSmallIntegerField(blank = True, null=True)
about = models.TextField(max_length=500, blank = True, null=True)
def __str__(self):
return self.user.first_name + ' ' + self.user.last_name
Теперь, учитывая, что я использую Django AllAuth, мне нужно переопределить метод signup
,чтобы иметь возможность сохранить User
объект.Используя указанный код, мой пользователь сохраняется должным образом, в то время как кандидат не сохраняется вообще, то есть нет записей в таблице кандидатов.
Я пробовал буквально все, но все еще не могу выяснить, что, возможно, пошлонеправильно.
ОБНОВЛЕНИЕ:
изменение candidate.user = user
на candidate.user = user.pk
, тоже не работает.