2017-09-08 1 views
0

気の毒1対1の関係に値を投稿していないが、私は任意のトレーニングなしでDjangoフレームワークに投げ込まれたユニ学生ですし、私はこのすべてを理解するために全力をやっています短時間。私は本当にDjangoを楽しんでいますが、私が持っている1つの問題を理解することはできません。Djangoの管理インライン表が複雑質問に対する

ので割り当てのために、私はより多くのフィールドが含まれるように、デフォルトの管理者ユーザテーブルを拡張する必要があります。

モデル::これは私が何をやったかである

class UserInfo(models.Model): 
    user = models.OneToOneField(User, 
    on_delete=models.CASCADE) 
    userTypeID = models.ForeignKey(UserType) 
    dob = models.DateField() 
    contactNumber = models.IntegerField() 
    address = models.CharField(max_length=50) 

@receiver(post_save, sender=User) 
def create_profile(sender, instance, created, **kwargs): 
    if created: 
     UserInfo.objects.create(user=instance) 
     UserInfo.save(instance) 

@receiver(post_save, sender=User) 
def save_user_profile(sender, instance, **kwargs): 
    instance.userinfo.save() 

def __str__(self): 
    return str(self.user) 

管理者:

class UserInfoInline(admin.StackedInline): 
model = UserInfo 

class UserAdmin(UserAdmin): 
    inlines = (UserInfoInline,) 

admin.site.register(UserType) 
admin.site.register(City) 
admin.site.unregister(User) 
admin.site.register(User, UserAdmin) 

これは私が探していたものである管理パネルで追加のフィールドが表示されます。私は、新しいユーザーを追加しようと、私はuserTypesの1(OneToOneField)を選択した場合しかし、私が取得:

IntegrityError /管理/認証/ユーザーの追加// (1048年、「列「userTypeID_id私は彼らがあることを理解し)( 『信号の受信者

は、今私は私を理解する)」NULLにすることはできませんが』これを処理する何かが欠けているが、私は何をするようにわからないと思います。

すべてのヘルプは大歓迎、私は新たなんだと、私は何も知らないかのように私に説明しようとするだろう(私は基本的に行うためではない笑)

答えて

0

あなたは完全なトレースバックを投稿する必要があります!

あなたはトレースバックを読んだとき、あなたはこのコードをトレースフレームの一部であることを参照してください。

UserInfo.objects.create(user=instance) 

この通報しますか? userTypeを使わずにUserInfoを保存しようとしているだけです!代わりにこれを試してみてください:

# make your default UserType object 
default_user_type, created = UserType.objects.get_or_create(name='default') 
UserInfo.objects.create(user=instance, UserTypeID=default_user_type) 

代替だけでオブジェクトを作成するときに記入する必要がありますする必要はない列にデフォルト値を追加することです。

+0

返信いただきありがとうございます。タイプを強制的に選択したいのですが? – Apocolyptic182

+0

私はまた、管理ページ 'usertype'のフィールドに有効なユーザータイプがあることを言及する必要がありますが、1つを選択して保存を押しても、値はnullにはならないと言います。 – Apocolyptic182

+0

compusloryにしたい場合:適切なオブジェクトを作成するためのフォームでビューを作成し、それが機能しないためにシグナル受信者を削除します。あなたの選択をして、私はちょうどあなたの質問に答えています。 3日後、この正解を受け入れなかったのはかなり失礼だと言わなければなりません。ただ助けたい人の多くが、おそらくこのページを開いて、正解はそこにあり、移動しました:コミュニティの時間と帯域を無駄にしています。これは「なぜあなたのシグナルからその例外を得るのか」に対する答えです。 – jpic

関連する問題