创造&在Django中更新UserProfile

时间:2011-11-14 11:06:57

标签: python django

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模型(例如,在注册表单中),在最终保存之前,我将如何创建,然后更新所有这些?

2 个答案:

答案 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()。