2011-07-23 4 views
0

デフォルトマネージャ(objects=model.Manager())に加えて、カスタムモデルマネージャを使用しています。モデルに2つの__unicode__メソッドを追加したいと思います.1つはデフォルトマネージャー用、もう1つはカスタムマネージャー用です。それ以外の場合、ユニコードは、デフォルトマネージャのユニコードで使用されている変数の一部を含まないカスタムマネージャの結果に対してエラーをスローします。例えば2つのユニコードメソッドをモデルに追加しますか?

-

class CreditCountManager(models.Manager): 
    def credit_count(self): 
     ... 
     return result_list 

class UserProfile(models.Model): 
    user = models.ForeignKey(User, unique=True) 
    full_name = models.CharField(max_length=100) 
    network = models.ForeignKey(Network) 
    ... 
    credit_count = CreditCountManager() 
    objects = models.Manager() 

# need something like: 
def __unicode-for-default__(self): 
    return "%s(%s)"%(self.user, self.network) 

def __unicode-for-credit_count__(self): 
    return "%s(%s)"%(other variables) 

はこれを行う方法はありますか?ありがとうございました。

+0

「...ユニコードは、カスタムマネージャの結果のためにエラーがスローされます。」 ...これはどういう意味ですか? –

答えて

1

あなたの質問にはどのようなエラーがあり、不完全であるかは記載されていません。

残念ながらユニコードはPythonの構造です。あなたはそれらをオフにすることができます。

代わりに、オブジェクトがカスタムメソッドを使用するために文字列にフォーマットされている場所を修正する必要があります。

など。代わりに

text = u"Something " + obj 

text = obj.my_formatter() 

問題は、例外が発生しないようにする方法を記述する必要がユニコード()メソッドの内部で上昇した例外の場合。例えば。初期化されていない変数は使用しないでください。

0

私はそれを簡単にするために__unicode__方法でtry/exceptを追加しました:

def __unicode__(self): 
    try: 
     self.user 
     return "%s(%s)"%(self.user, self.network) 
    except (User.DoesNotExist, Network.DoesNotExist): 
     return "%s(%s)"%(self.full_name, self.credit_count) 
関連する問題