1

几个小时以来,我一直在试图解决这个问题,相信我,我真的在 Stack Overflow 上到处寻找。

在我的 UserProfile 中,我有一个对另一个模型(称为“公司”)的 ForeignKey 引用,并且在注册后,我创建了一个新公司并将我的 UserProfile ForeignKey 指向该公司。

models.py 如下:

class UserProfile(models.Model):
  company = models.ForeignKey(Company)
  title = models.CharField(max_length = 50, default = '')
  user = models.OneToOneField(User, default = 0, null = True)

class Company(models.Model):
  """A company profile."""
  name = models.CharField(max_length = 50)

我使用表格进行注册。这是表格:

class SignupForm(ModelForm):
  name = forms.CharField(label = "Name")
  company = forms.CharField(max_length = 50)
  email = forms.EmailField(label = "Email")
  password = forms.CharField(widget=forms.PasswordInput)

  class Meta:
    model = User
    fields = ("name", "company", "email", "password")

  def save(self, commit=True):
    user = super(SignupForm, self).save(commit=False)
    name = self.cleaned_data["name"].split()
    if len(name) == 1:
      # User did not enter a last name.
      user.first_name = name
    else:  
      user.first_name, user.last_name = name
    user.email = self.cleaned_data["email"]
    user.set_password(self.cleaned_data["password"])
    user.username = user.email
    if commit:
      user.save()

    return user

这是注册视图:

def signup(request):
  if request.method == 'POST':
    form = SignupForm(request.POST)
    if form.is_valid():
      # Check if email has already been used for an account.
      email = request.POST['email']
      existing_account = User.objects.filter(email = email)
      if existing_account:
        form = SignupForm()
        return render_to_response('registration/signup.html',
          { 'form': form,
            'error': 'duplicate_email',
          })

      # Otherwise, save the form and create a new user.
      new_user = form.save()

      company = Company(name=request.POST['company'])
      company.save()

      user_profile = new_user.get_profile()
      user_profile.company = company
      user_profile.save()

      new_user = authenticate(
        username = email,
        password = request.POST['password']
      )
      # Log the user in automatically.
      login(request, new_user)

      # Redirect user to Thank You page.
      return HttpResponseRedirect('/thanks')
  else:
    form = SignupForm()

  return render_to_response('registration/signup.html', {
    'form': form,
  })

我得到的错误是告诉我 company_id 不能为空。我清楚地添加了一家新公司。请让我知道您认为可能有什么问题。

谢谢

4

2 回答 2

0

不确定这是否对您的口味来说太老套了,但也许您可以创建/保存 Company 对象并将其作为位置/关键字参数传递给您的 SignupForm.save() 方法。

你会遇到的问题是你会期待一个 CharField 并且你会传入一个公司对象。因此,您可能希望将 company.pk 提供给表单中的公司字段。

于 2012-05-12T01:56:34.297 回答
0

我今天遇到了这个确切的错误,没有任何原因,只是它是由 SQLite 引起的。使用 SQLite,一张表的 id 字段从 INTEGER PRIMARY KEY 变为 INTEGER。如果您使用的是 SQLite,请尝试删除有问题的表并使用 syncdb 重新创建它。

什么是价值

user_profile = new_user.get_profile()

?

于 2012-05-11T22:07:15.487 回答