1

Django UserProfile 機能を使用してユーザーを登録しようとしています。拡張 UserProfile モデルがあります。私のファイルは以下のようになります。「accounts_userprofile.u_id may not be NULL」というメッセージが表示されます。フォームを保存するときに「commit=false」を使用しようとしましたが、うまくいきませんでした。私の親モデルには、null = True、空白 = True に設定されたフィールドがあります。テーブルを削除して数回追加しましたが、何も機能しませんでした. 助けてください. よろしくお願いします.

私のモデルは以下の通りです:

class UserBase(models.Model):
class Meta:
    abstract = True
    u_id = models.IntegerField(null = True,blank = True)
    email = models.CharField(max_length=200, null = True,blank = True)
    website=models.CharField(max_length=200, null = True, blank = True)
    age = models.IntegerField(blank = True, null = True)
    location = models.CharField(max_length= 200, null=True, blank = True)
    username = models.CharField(max_length = 100, null = True, blank = True)

UserProfile モデルは次のとおりです。

class UserProfile(UserBase):
user = models.ForeignKey(User, null= True, blank = True, unique = True)

User.profile = property(lambda u: UserProfile.objects.get_or_create(user=u)[0]) 
def __unicode__(self):
    return "User Profile for: " + self.user.username

def create_user_profile(sender, **kw): ユーザー = kw['インスタンス'] if kw['created']: up = UserProfile(user=user)

    up.save()

post_save.connect(create_user_profile、送信者 = ユーザー、dispatch_uid ="user_create_profile")

私の登録ビューは以下のとおりです。

def register(request, template_name="registration/register.html"): request.method == 'POST' の場合:

  postdata = request.POST.copy()
  form = UserCreationForm(postdata)
  if form.is_valid(): 

      un = postdata.get('username','')
      pw = postdata.get('password1','')

      from django.contrib.auth import login, authenticate

      new_user = authenticate(username=un, password=pw)
      form.save()
      #if new_user and new_user.is_active:
          #login(request, new_user)
          #url = urlresolvers.reverse('my_account')
          #return HttpResponseRedirect(url)

else: form = UserCreationForm() page_title = 'ユーザー登録' return render_to_response(template_name, locals(), context_instance=RequestContext(request))>

4

1 に答える 1

2

Django Docsから:

https://docs.djangoproject.com/en/1.4/ref/models/fields/

Field.unique

Trueの場合、このフィールドはテーブル全体で一意である必要があります。

これは、データベースレベルおよびモデル検証によって実施されます。一意のフィールドに重複する値を持つモデルを保存しようとすると、モデルのsave()メソッドによってdjango.db.IntegrityErrorが発生します。

このオプションは、ManyToManyFieldとFileFieldを除くすべてのフィールドタイプで有効です。

UserProfiles.u_idは一意であり、そうではない(blanks / null)ことをUserProfilesに伝えています。したがって、エラーが発生します。u_idをAutoFieldのprimary_keyに変更することを検討することをお勧めします。そして、models.ForeignKey('UserBase')を使用してそれらを接続します

于 2012-12-17T08:03:35.403 に答える