【发布时间】:2019-04-21 03:18:38
【问题描述】:
考虑以下代码:
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,也不起作用。
【问题讨论】:
-
试试这个
candidate.user = user.pk还有,有没有例外? -
@shafik nope,这也行不通。
标签: django django-models django-forms modelform