У меня есть модель 'users', которая имеет модель OneToOneField для UserModel и модель ForeignKey Field для модели 'types'. Как сохранить файл ForeignKeyField в базе данных?
models.py:
class types(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE, default='')
name = models.CharField(max_length=100)
def __str__(self):
return self.name
class users(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE, default='')
user_type = models.ForeignKey(types, on_delete=models.SET_NULL, blank=True, null=True)
mobile = models.CharField(max_length=20)
def __str__(self):
return self.mobile + "(" + self.user.first_name + " " + self.user.last_name + ")"
@property
def full_name(self):
return '%s %s' % (self.user.first_name, self.user.last_name)
@receiver(post_save, sender=User)
def update_user_users(sender, instance, created, **kwargs):
if created:
users.objects.create(user=instance)
instance.users.save()
views.py:
def signup(request):
if request.method == 'POST':
form = forms.SignUpForm(request.POST)
if form.is_valid():
user = form.save()
user.refresh_from_db()
user.users.mobile = form.cleaned_data.get('mobile')
user.users.user_type = form.cleaned_data.get('user_type')
user.save()
raw_password = form.cleaned_data.get('password1')
user = authenticate(username=user.username, password=raw_password)
login(request, user)
return redirect('index')
else:
form = forms.SignUpForm()
return render(request, 'user/signup.html', {'form': form})
forms.py:
lass SignUpForm(UserCreationForm):
mobile = forms.CharField(max_length=20)
user_type = forms.CharField(max_length=100)
class Meta:
model = User
fields = ('username',
'password1',
'password2',
'first_name',
'last_name',
'mobile',
'user_type',
)
Но у меня есть эта ошибка:
Невозможно назначить «type1»: «users.user_type» должен быть экземпляром «types».