0

私の Web ページのサインアップビュー (以下) は、Django の認証モデルUserを介して新しいユーザーを作成し、その新しく作成されたユーザーの ID を使用して、独自のモデルaccount.Usersを介してさらに情報を追加します。私の問題は、新しいユーザーの ID を 2 番目のモデル ( account.Usersの ForeignKey 列) に渡しているにもかかわらず、列 *user_id* が非 null 制約に違反しているというエラーが引き続き発生することです。

IntegrityError at /account/signup/ 
null value in column "user_id" violates not-null constraint

私のモデルの関連部分は次のとおりです。

class Users(models.Model):
  user = models.ForeignKey(User, unique=True, null=True, blank=True)
  firstname = models.CharField(max_length=100, blank=True, default='')

そして、私の見解の関連部分:

def signup(request):
  if request.method == 'POST' and request.POST['firstname']:   
    user = User.objects.create_user(request.POST['username'], request.POST['email'], request.POST['password'])
    userId = user.id
    form = UsersForm(request.POST, request.FILES)
    if form.is_valid():
      cmodel = form.save()
      cmodel.user_id = userId
      cmodel.firstname = request.POST['firstname']
      cmodel.save()

このエラーの原因は何ですか?

*cmodel.user_id* をuserIdに設定する以外に、最初のステップで作成したユーザーオブジェクト、および文字列と int (それぞれ「1」と 1) に設定しようとしました。毎回同じエラーが発生します。また、フィールドをcmodel.userに変更しようとしました。Django のエラー ページから、変数userIdに実際に値が含まれていることもわかります。

4

1 に答える 1

1

予想外ではありましたが、解決策は簡単でした。他の誰かが同じ問題に遭遇した場合に備えて、ここに書いています。

上に示したモデルの要約部分に加えて、 PIL (Python Imaging Library)で画像を保存しようとしていました。上記のモデルの関連部分にそれを追加します。

class Users(models.Model):
  user = models.ForeignKey(User, unique=True, null=True, blank=True)
  firstname = models.CharField(max_length=100, blank=True, default='')
  profile_pic = models.ImageField(upload_to='profilepics', max_length=300, default='')

この「upload_to」フォルダ「 profilepics 」アクセス権は「755」でしたが、ターミナルで「$ chmod -R 777 profilepics」を実行してアクセス権を変更したところ、すべて機能しました。エラーメッセージが「user_id」フィールドがnullであると非難していたのは奇妙です。それは実際には、まったく別のものに対するフォルダーのアクセス許可にすぎませんでした。いつか誰かを助けることを願っています。

于 2013-07-25T21:51:54.610 に答える