2017-04-01 6 views
0

に変更していますので、以前に行った設定に従ってデフォルトの言語を変更しようとしています。私の問題は、関数呼び出しの値が '英語'または 'スペイン語'ですが、実際に動作させるには 'en'や 'esp'のような短い用語が必要です。私はそれを実行しようとしようとしたとき、私はまた、このエラーメッセージを持っている:userlang()は正確に(与えられた0)1つの引数を取るので、ここではデフォルトの機能をdjango

は、私が試したものです:

def userlang(self): 
    return (self.user.userprofile.language) 

class 123(models.Model 
    language = models.CharField(verbose_name=_(u"Language"), 
       max_length=4, choices=settings.LANGUAGES,default=userlang) 

私は誰かが私を助けることを願ってでる。

+0

これは私が最初に試したものですが、userlangが定義されていないため動作しません。名前は元のものではありませんが、私は投稿のために変更しましたが、ありがとうございます:) – hansTheFranz

+0

'user'関数から' self'パラメータを削除してください。もちろん、内部で 'self'を参照しているので、これはうまくいきません。これを回避するには、 'default'を削除するか(または' LANGUAGES'の選択肢からそれを保持して)、 '' save']を上書きします(https://docs.djangoproject.com/ja/1.10/) topics/db/models /#overriding-model-methods)メソッドを呼び出し、そこに値を設定します。 –

答えて

1

あなたは、このようなものを使用することができます。

class CustomModel(models.Model): 
    language = gender = models.CharField(
     max_length=2, 
     choices=(('en', 'English'),('es', 'Spanish')), 
     default=None, 
     blank=True, 
     null=True 
    ) 

そして、それは使用するために、かなりまっすぐ進むのです。

言語の可能性が100以上ある場合は、そのようなパターンを使用せずOneToMany関連付けを行う必要があります。

Btw。あなたの例は非常にひどくフォーマットされ、書かれています。あなたが持っているエラーについては、あなたの関数の引数で "self"を取り除くだけです...クラスメソッドのときだけ必要です。

関連する問題