Django新手在这里磕磕绊绊地说道。我正在尝试使用Django的“UserProfiles”创建用户配置文件,但是我在找出基于Django文档设置代码的正确方法时遇到了一些麻烦。
这是我的代码,基于文档。 (create_user_profile是文档中的100%)。
from django.db import models
from django.contrib.auth.models import User
from django.db.models.signals import post_save
class UserProfile(models.Model):
user = models.OneToOneField(User)
location = models.CharField(max_length = 100)
website = models.CharField(max_length=50)
description = models.CharField(max_length=255)
fullName = models.CharField(max_length=50)
email = models.EmailField(max_length = 100, blank = False)
created = models.DateTimeField(auto_now_add=True)
private = models.BooleanField()
def create_user_profile(sender, instance, created, **kwargs):
if created:
UserProfile.objects.create(user=instance)
post_save.connect(create_user_profile, sender=User)
设置和保存这些字段的方法是什么?
例如,如果我同时拥有一个表单中的User和UserProfile模型(例如,在注册表单中),在最终保存之前,我将如何创建,然后更新所有这些?
答案 0 :(得分:2)
在最终保存
之前,我将如何首先创建,然后更新所有这些内容
这些不是单独的步骤。在Django中创建或更新记录时,您将其保存到数据库中。
对于注册表单,我建议您在ModelForm
条记录中将其设置为User
,然后指定要保存到配置文件的其他字段,并将它们单独保存在保存中功能,就像这样...
class RegistrationForm(forms.ModelForm):
location = forms.CharField(max_length=100)
# etc -- enter all the forms from UserProfile here
class Meta:
model = User
fields = ['first_name', 'last_name', 'email', and other fields in User ]
def save(self, *args, **kwargs):
user = super(RegistrationForm, self).save(*args, **kwargs)
profile = UserProfile()
profile.user = user
profile.location = self.cleaned_data['location']
# and so on with the remaining fields
profile.save()
return profile
答案 1 :(得分:0)
当您需要从注册表单保存数据时,您可以调用profile.user.save()并在它之后调用profile.save()。