我的 user_id 配置文件数据库为空,我如何在 user_id 中插入值?
my user_id profile database is null, how i insert the value in user_id?
为什么我的数据看起来像这样?
我可以在user_id中取值吗?
如果我删除 def create_user_profile,它将创建 nama、nik、电子邮件、nomor_hp。
但是 user_id 为空
图中id 1和id 2是我在没有def的情况下创建的create_user_profile
当我使用 def create_user_profile
时创建 id 3,4,5,6
这是我的models.py
class Profile(models.Model):
user = models.OneToOneField(User, null=True, blank=True, on_delete=models.CASCADE)
nama = models.CharField(max_length=30, blank=True)
nik = models.CharField(max_length=30, blank=True)
email = models.EmailField(max_length=75, blank=True)
nomor_hp = models.TextField(max_length=15, blank=True)
def __str__(self):
return self.user
@receiver(post_save, sender=User)
def create_user_profile(sender, instance, created, **kwargs):
try:
instance.profile.save()
except ObjectDoesNotExist:
Profile.objects.create(user=instance)
这是我views.py创建用户,我是不是弄错了?
def signup(request):
if request.method == 'POST':
user_form = UserCreationForm(request.POST)
profile_form = ProfileForm(request.POST)
if user_form.is_valid() and profile_form.is_valid():
user = user_form.save(commit=False)
profile = profile_form.save(commit=False)
user.is_active = False
user.save()
profile.save()
uidb64 = urlsafe_base64_encode(force_bytes(user.pk))
domain = get_current_site(request).domain
link=reverse('activate', kwargs={
'uidb64': uidb64, 'token': token_generator.make_token(user)})
activate_url = 'http://'+domain+link
email_body = 'Hallo '+user.username + 'Tolong gunakan link ini untuk verifikasi akun anda\n' +activate_url
email_subject = 'Aktivasi Akun Anda'
email = EmailMessage(
email_subject,
email_body,
'noreply@kantorkecamatanbintanutara.com',
[profile.email],
)
email.send(fail_silently=False)
return redirect('/pengurusan/signin')
else:
return render(request, 'pengurusan/register.html', {
'user_form': user_form,
'profile_form': profile_form
})
您的 signup
视图和信号都构成了一个 Profile
对象,更糟糕的是,在后者中您不会 link 给用户。
我建议放弃创建 Profile
的信号。它没有多大用处。如果您稍后编辑 Profile
,您应该简单地保护它,此外您应该确保当您创建一个 User
对象时,您只是正确地 link 它。例如:
def signup(request):
if request.method == 'POST':
user_form = UserCreationForm(request.POST)
profile_form = ProfileForm(request.POST)
if user_form.is_valid() and profile_form.is_valid():
user = user_form.save()
profile_form<b>.instance.user = user</b>
profile = profile_form.save()
# …
# …
为什么我的数据看起来像这样?
我可以在user_id中取值吗? 如果我删除 def create_user_profile,它将创建 nama、nik、电子邮件、nomor_hp。 但是 user_id 为空
图中id 1和id 2是我在没有def的情况下创建的create_user_profile 当我使用 def create_user_profile
时创建 id 3,4,5,6这是我的models.py
class Profile(models.Model):
user = models.OneToOneField(User, null=True, blank=True, on_delete=models.CASCADE)
nama = models.CharField(max_length=30, blank=True)
nik = models.CharField(max_length=30, blank=True)
email = models.EmailField(max_length=75, blank=True)
nomor_hp = models.TextField(max_length=15, blank=True)
def __str__(self):
return self.user
@receiver(post_save, sender=User)
def create_user_profile(sender, instance, created, **kwargs):
try:
instance.profile.save()
except ObjectDoesNotExist:
Profile.objects.create(user=instance)
这是我views.py创建用户,我是不是弄错了?
def signup(request):
if request.method == 'POST':
user_form = UserCreationForm(request.POST)
profile_form = ProfileForm(request.POST)
if user_form.is_valid() and profile_form.is_valid():
user = user_form.save(commit=False)
profile = profile_form.save(commit=False)
user.is_active = False
user.save()
profile.save()
uidb64 = urlsafe_base64_encode(force_bytes(user.pk))
domain = get_current_site(request).domain
link=reverse('activate', kwargs={
'uidb64': uidb64, 'token': token_generator.make_token(user)})
activate_url = 'http://'+domain+link
email_body = 'Hallo '+user.username + 'Tolong gunakan link ini untuk verifikasi akun anda\n' +activate_url
email_subject = 'Aktivasi Akun Anda'
email = EmailMessage(
email_subject,
email_body,
'noreply@kantorkecamatanbintanutara.com',
[profile.email],
)
email.send(fail_silently=False)
return redirect('/pengurusan/signin')
else:
return render(request, 'pengurusan/register.html', {
'user_form': user_form,
'profile_form': profile_form
})
您的 signup
视图和信号都构成了一个 Profile
对象,更糟糕的是,在后者中您不会 link 给用户。
我建议放弃创建 Profile
的信号。它没有多大用处。如果您稍后编辑 Profile
,您应该简单地保护它,此外您应该确保当您创建一个 User
对象时,您只是正确地 link 它。例如:
def signup(request):
if request.method == 'POST':
user_form = UserCreationForm(request.POST)
profile_form = ProfileForm(request.POST)
if user_form.is_valid() and profile_form.is_valid():
user = user_form.save()
profile_form<b>.instance.user = user</b>
profile = profile_form.save()
# …
# …