如何创建在Django中保存用户和用户配置文件对象的视图

如何创建在Django中保存用户和用户配置文件对象的视图,django,django-models,django-forms,django-views,django-users,Django,Django Models,Django Forms,Django Views,Django Users,我在Django中有两个模型:User(由Django预定义)和UserProfile。两者通过外键连接 models.py: class UserProfile(models.Model): user = models.ForeignKey(User, unique=True, related_name="connect") location = models.CharField(max_length=20, blank=True, null=True) 我使用UserCreatio

我在Django中有两个模型:User(由Django预定义)和UserProfile。两者通过外键连接

models.py:

class UserProfile(models.Model):
  user = models.ForeignKey(User, unique=True, related_name="connect")
  location = models.CharField(max_length=20, blank=True, null=True)
我使用UserCreationForm(由Django预定义)作为用户模型,并在forms.py中为UserProfile创建了另一个表单

#UserCreationForm for User Model

class UserProfileForm(ModelForm):
  class Meta:
    model = UserProfile
    exclude = ("user", )
我将这两个表单加载到一个模板registration.html中,这样网站客户就可以输入关于这两个模型中包含的字段的数据(例如:用户模型中的“first_name”、“last_name”,用户配置文件模型中的“location”)

就我个人而言,我不知道如何创建此注册表的视图。到目前为止,我所尝试的将创建用户对象,但它不会关联其他信息,例如相应的UserProfile对象中的位置。有人能帮我吗?这就是我目前拥有的:

def register(request):
  if request.method == 'POST':
    form1 = UserCreationForm(request.POST)
    form2 = UserProfileForm(request.POST)
    if form1.is_valid():
      #create initial entry for User object
      username = form1.cleaned_data["username"]
      password = form1.cleaned_data["password"]
      new_user = User.objects.create_user(username, password)

      # What to do here to save "location" field in a UserProfile 
      # object that corresponds with the new_user User object that 
      # we just created in the previous lines

  else:
    form1 = UserCreationForm()
    form2 = UserProfileForm()
  c = {
    'form1':UserCreationForm,
    'form2':form2,
  }
  c.update(csrf(request))
  return render_to_response("registration/register.html", c)
差不多了:)

为了澄清一点,
form.save()
创建一个模型实例并将其保存到db
form.save(commit=False)
只创建一个实例,但不将任何内容保存到数据库

def register(request):
    if request.method == 'POST':
        form1 = UserCreationForm(request.POST)
        form2 = UserProfileForm(request.POST)
        if form1.is_valid() and form2.is_valid():
            user = form1.save()  # save user to db
            userprofile = form2.save(commit=False)  # create profile but don't save to db
            userprofile.user = user
            userprofile.location = get_the_location_somehow()
            userprofile.save()  # save profile to db

    else:
        form1 = UserCreationForm()
         form2 = UserProfileForm()
    c = {
      'form1':form1,
      'form2':form2,
    }
    c.update(csrf(request))
    return render_to_response("registration/register.html", c)