0

auth_userテーブルを拡張するアプリを開発しています。ユーザーがアプリに登録するたびに、その 1 つのインスタンスが拡張テーブルに作成されます。単純な URL から (手動で) 非常にうまく機能しますが、管理者側からログインしてユーザーを追加すると、また、拡張テーブルにインスタンスを作成しますが、ユーザー名を表示または取得せず、空白行を表示するだけです。

model.py コードは次のとおりです。

from django.db import models
from django.contrib.auth.models import User
from django.db.models.signals import post_save
class Drinker(models.Model):
       user     =models.OneToOneField(User)
       birthday =models.DateField()
       name     =models.CharField(max_length=100)

       def __unicode__(self):
             return self.name

#create our user object to attach to our drinker object

def create_drinker_user_callback(sender, instance, **kwargs):
      drinker, new=Drinker.objects.get_or_create(user=instance)
post_save.connect(create_drinker_user_callback, User)

最後の 3 行は、拡張テーブルのドリンカーにインスタンスを作成しますが、auth_user テーブルから user_id を取得するだけで値を表示しません。名前も誕生日も要らない

4

1 に答える 1

1

Drinker.name フィールドに入力していません。unicode () メソッドが何も返さないため、行は空白です。

これを解決する 1 つの方法は、シグナル ハンドラで明示的に設定することです。

def create_drinker_user_callback(sender, instance, **kwargs):
      drinker, new=Drinker.objects.get_or_create(user=instance, name=instance.get_full_name())
post_save.connect(create_drinker_user_callback, User)

または(おそらく冗長な)名前フィールドを完全に捨てて、少し正規化します:

class Drinker(models.Model):
    user = models.OneToOneField(User)
    birthday = models.DateField()

    def __unicode__(self):
        return self.user.get_full_name()
于 2012-09-12T10:16:19.000 に答える