我对django很新,所以请耐心等待。我想要的是每当注册新用户时我想为该用户创建About
。我该怎么做?请帮我。谢谢。
的观点:
def register(request):
if request.method == 'POST':
form = UserCreationForm(request.POST or None)
if form.is_valid():
form.save()
return HttpResponseRedirect('/')
else:
return render(request, 'register.html', {'form':form})
else:
form = UserCreationForm()
return render(request, 'register.html', {'form':form})
模型:
class About(models.Model):
user = models.OneToOneField(User)
gender = models.CharField(max_length=1, choices=GENDER)
dob = models.DateField(null=True, blank=True)
place = models.CharField(max_lenght=100)
答案 0 :(得分:1)
如果您尚未查看表单,请阅读以下链接:
https://docs.djangoproject.com/en/1.7/topics/forms/ https://docs.djangoproject.com/en/1.7/ref/forms/api/
如果您需要查看一些代码来开始,
class UserCreationForm(forms.Form) or (models.Form) '''You should read up on these two'''
#define form attributes here
def clean(self):
'''write your validations here'''
return self.cleaned_data
def save(self)
data = self.cleaned_data
about = About()
about.user = data.get("user")
about.gender = data.get("gender")
about.place = data.get("place")
year = data.get("year")
month = data.get("month")
day = data.get("day")
about.dob = datetime(year, month, day).date()
about.save()
此外,个人资料或会员名称将比您的模型更直观。只给我两分钱。 希望这会有所帮助。
答案 1 :(得分:1)
如果您知道将为每个用户创建一个About
实例,无论他们是如何创建的(例如用户输入,通过管理员或通过shell)signals都可以有帮助的。
所以在你的情况下:
class About(models.Model):
user = models.OneToOneField(User)
gender = models.CharField(max_length=1, choices=GENDER)
dob = models.DateField(null=True, blank=True)
place = models.CharField(max_lenght=100)
def user_post_save(sender, instance, created, *args, **kwargs):
"""create an about when a new user is created
data:
sender - The model class. (User)
instance - The actual instance being saved.
created - Boolean; True if a new record was created.
*args, **kwargs - Capture the unneeded `raw` and `using`(1.3) arguments.
"""
if created:
About.objects.create(user=instance)
post_save.connect(user_post_save, sender=User)
现在,只要创建了新的User
,就会自动为它们创建About
。
答案 2 :(得分:0)
您可以通过扩展类来覆盖save
上的UserCreationForm
方法,以便每次调用save时,都会自动创建About
对象。
class CustomUserCreationForm(UserCreationForm):
def save(self, commit=True):
instance = super(CustomUserCreationForm, self).save(commit=False)
about = About()
about.user = instance
about.gender = 1
about.place = "Indonesia"
about.save()
return instance
或者,您可以将AutoOneToOne
字段与django-annoying