为新注册的用户创建一个新对象

时间:2015-02-20 19:21:24

标签: django django-1.7

我对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)

3 个答案:

答案 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

一起使用
相关问题