Django1.11の注文結果の問題-注釈を付けると間違った値が返される

cch

私はdjango1.11を使用しています:

  • 次のように、外部キー属性のfalse値の数を計算するモデル定義があります。

モデル:

class Model(models.Model):
    .
    . 
    . 

    def count_total(self):
        return self.anothermodel_set.filter(val=False).count()

見る:

class ModelViewSet(viewsets.ReadOnlyModelViewSet):
    queryset = Model.objects.all()
    serializer_class = ModelSerializerClass
    permissions = AuthenticatedReadOnly
    pagination_class = StandardResultsSetPagination

    def list(self, request):
        queryset = Model.objects.all()

        # Attempt 1: returns wrong count
        queryset = queryset.annotate(a_count=Count(Case(When(anothermodel__val=False, then=1), default=0, output_field=IntegerField())))

        # Attempt 2: returns wrong count, same as attempt 1
        queryset = queryset.annotate(b_count=Count(Q(anothermodel__val=False)))

        # ideally I want to do 
        queryset = queryset.order_by('count_total')

それで注文するときcount_totalはあげます

/ api / endpoint /のFieldErrorキーワード「count_total」をフィールドに解決できません。

シリアライザー

私のシリアライザーではto_represantation、デバッグするように定義を変更しました

def to_representation(self, instance):
    return {'id': instance.pk, 'a_count': instance.a_count, 'b_count' : instance.b_count, 'correct_count': instance.count_total()}

それ以外の場合、私のシリアライザーには次のものがあります。

class Meta:
    model = Model
    fields = ('id', 'title', 'bunch-of-other-stuff', 'count_total')

instance.count_total()正しい結果を返しますが、私は単にそれを使用することはできませんqueryset.order_by('count_total')注釈なしの結果を注文する点で好ましいです。

ここで何が悪いのか考えはありますか?

ブレーデンホルト

これが問題かどうかはわかりませんが、値を返さず、計算を行うだけなので、モデル定義は未使用のように見えます。そのはず:

def count_total(self):
        return self.anothermodel_set.filter(val=False).count()

モデルとビューの両方で計算が行われる理由についても混乱しています。モデル定義を使用するか、クエリセットに注釈を付けますが、両方を行う必要はありません。モデル定義ルートに進むと、ビューは次のようになります。

class ModelViewSet(viewsets.ReadOnlyModelViewSet):
    queryset = Model.objects.all()
    serializer_class = ModelSerializer
    permissions = AuthenticatedReadOnly
    pagination_class = StandardResultsSetPagination

    def list(self, request):

        queryset = self.queryset.order_by('count_total')
        serializer = self.get_serializer(queryset, many=True)

        return Response(serializer.data)

モデル定義を使用する場合は、シリアライザーでread_only属性のようなものを設定する必要があります。

count_total = serializers.ReadOnlyField(allow_null=True)

class Meta:
    model = Model
    fields = ('id', 'title', 'bunch-of-other-stuff', 'count_total')

それでも「カウント合計をフィールドに解決できない」エラーが発生する場合は、次のようにシリアライザーを実行する前に、印刷ステートメントをビューセットにスローします。

print(str(queryset))

問題は、モデル定義をどのようにフィルタリングしているかにある可能性があります。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

Python / Django-別のクエリによって決定された値でQuerySetに注釈を付ける方法

分類Dev

Django1つのリストアイテムにのみコメントを投稿する方法

分類Dev

Django1回の送信リクエストで同じモデルフォームを2回保存する方法

分類Dev

Django1からDjango2のon_deleteエラー

分類Dev

Django1つのビュー関数から他のビュー関数に値のリストを渡す方法

分類Dev

シリアライザーを使用したレストフレームワークでのAPI呼び出しのDjango1対多の関係

分類Dev

Django ORMは、合計計算に間違った注釈を付け、エントリ数を掛けると、有線で接続されます

分類Dev

この型の署名に注釈を付けるという私の間違いが物事を壊さなかったのはなぜですか?

分類Dev

どこが間違っているのですか?1桁を返す前に、数値が追加された回数を印刷しようとしています

分類Dev

クエリからの結果の注文に関する問題

分類Dev

Djangoで注釈を付けた後に追加の値を選択する

分類Dev

django1つの送信フォーム複数の入力同じ名前

分類Dev

結果の表示に関する1次元配列の問題

分類Dev

Django-個別の値のcount()に注釈を付ける方法

分類Dev

Django:フィルタリングされた逆の関係に注釈を付ける

分類Dev

Djangoで複数の値に注釈を付ける方法

分類Dev

djangoの条件で注釈を付ける最大値

分類Dev

1つのグラフに表示された2つの辞書の値でパンダ棒グラフに注釈を付ける方法は?

分類Dev

Python辞書で値を探すと間違った結果が返される

分類Dev

SQLの別の列でブール値が変更されたときに列に注釈を付ける

分類Dev

1つのモデルで注釈を付けるDjango

分類Dev

3つの異なるテーブルから1つの値を取得すると、間違った結果が得られます-postgresql

分類Dev

パンダの集計値を集計すると、間違った結果が返されます

分類Dev

1つは大きい整数と1つは小さい整数の2つの整数を除算すると、間違った答えが返されます

分類Dev

1つ以上の数値定数のビット単位の値が引数として渡されたときにphpinfo()関数が間違った結果を返すのはなぜですか?

分類Dev

Django-クエリする最新の子の列値に注釈を付ける

分類Dev

中間モデルのdjangoのフィールドに注釈を付ける

分類Dev

Django:条件付きの注釈に基づいて注釈を付ける

分類Dev

StringBuilderの比較で間違った結果が返される

Related 関連記事

  1. 1

    Python / Django-別のクエリによって決定された値でQuerySetに注釈を付ける方法

  2. 2

    Django1つのリストアイテムにのみコメントを投稿する方法

  3. 3

    Django1回の送信リクエストで同じモデルフォームを2回保存する方法

  4. 4

    Django1からDjango2のon_deleteエラー

  5. 5

    Django1つのビュー関数から他のビュー関数に値のリストを渡す方法

  6. 6

    シリアライザーを使用したレストフレームワークでのAPI呼び出しのDjango1対多の関係

  7. 7

    Django ORMは、合計計算に間違った注釈を付け、エントリ数を掛けると、有線で接続されます

  8. 8

    この型の署名に注釈を付けるという私の間違いが物事を壊さなかったのはなぜですか?

  9. 9

    どこが間違っているのですか?1桁を返す前に、数値が追加された回数を印刷しようとしています

  10. 10

    クエリからの結果の注文に関する問題

  11. 11

    Djangoで注釈を付けた後に追加の値を選択する

  12. 12

    django1つの送信フォーム複数の入力同じ名前

  13. 13

    結果の表示に関する1次元配列の問題

  14. 14

    Django-個別の値のcount()に注釈を付ける方法

  15. 15

    Django:フィルタリングされた逆の関係に注釈を付ける

  16. 16

    Djangoで複数の値に注釈を付ける方法

  17. 17

    djangoの条件で注釈を付ける最大値

  18. 18

    1つのグラフに表示された2つの辞書の値でパンダ棒グラフに注釈を付ける方法は?

  19. 19

    Python辞書で値を探すと間違った結果が返される

  20. 20

    SQLの別の列でブール値が変更されたときに列に注釈を付ける

  21. 21

    1つのモデルで注釈を付けるDjango

  22. 22

    3つの異なるテーブルから1つの値を取得すると、間違った結果が得られます-postgresql

  23. 23

    パンダの集計値を集計すると、間違った結果が返されます

  24. 24

    1つは大きい整数と1つは小さい整数の2つの整数を除算すると、間違った答えが返されます

  25. 25

    1つ以上の数値定数のビット単位の値が引数として渡されたときにphpinfo()関数が間違った結果を返すのはなぜですか?

  26. 26

    Django-クエリする最新の子の列値に注釈を付ける

  27. 27

    中間モデルのdjangoのフィールドに注釈を付ける

  28. 28

    Django:条件付きの注釈に基づいて注釈を付ける

  29. 29

    StringBuilderの比較で間違った結果が返される

ホットタグ

アーカイブ