1

Hvad を使用して翻訳可能なモデルを作成していますが、モデルを取得しようとするとエラーが発生します。

次のような 2 つのモデル クラスがあります。

class Boy(TranslatableModel):
  age = models.PositiveSmallIntegerField()
  toy = models.ForeignKey(Toy)

  translations = TranslatedFields(
    name = models.CharField(max_length=60),
 ) 


class Toy(TranslatableModel):
   price = models.PositiveSmallIntegerField()

   translations = TranslatedFields(
    model_name = models.CharField(max_length=60),
   )

私は次のようなクエリを作成しようとしています:

 Boy = Boy.objects.language('en').filter(name="john", toy__model_name="car")

次のエラーが表示されます: 翻訳されていないモデルから「model_name」などの翻訳されたフィールドにアクセスするには、翻訳対応マネージャーを使用する必要があります。翻訳不可能なモデルの場合は、hvad.utils.get_translation_aware_manager を使用して取得できます。翻訳可能なモデルの場合、language() メソッドを使用します。

以下は完璧に機能します:

 Boy = Boy.objects.language('en').filter(name="john")

// toy__model_name="car" // を追加するとエラーになります。

私は何を間違っていますか?私が望むものを達成する方法は何ですか?

4

1 に答える 1

0

残念ながら、今のところ、詳細に翻訳された引数はサポートされていません。hvad の次の大幅な書き換えで変更される可能性がありますが、その予定はまだありません。(開発ブランチに実装されていますが、バグが多すぎてマスターできません)

当面は、ネストされたクエリが機能するはずです。

Boy = Boy.objects.language('en').filter(name="john", toy__in=Toy.objects.language('en').filter(model_name="car"))

postgresql を使用する場合、パフォーマンスはあまり変わらないはずです。postgresql はこれを正しく最適化するのに十分賢いです。

于 2015-10-28T01:34:53.813 に答える