Django Rest Framework:MultipleObjectsReturned

マリア・エミリア・ディアス

プロジェクトの要件は、既存のデータベースから開始することです。複合キーを持つテーブルがあります。このデータベースからモデルを生成するとき、フィールドは主キーとして残され、以前に複合キーを形成した両方のフィールドに固有の制約が残されました。

次に例を示します。

models.py

class Preciosventalista(models.Model):
    idlistaprecio = models.OneToOneField(Listasprecios, models.DO_NOTHING, db_column='idlistaprecio', primary_key=True)
    idarticu = models.ForeignKey(Articulos, models.DO_NOTHING, db_column='idarticu')
    porcendescue = models.DecimalField(max_digits=6, decimal_places=2)
    cohefi = models.DecimalField(max_digits=10, decimal_places=4)
    precioneto = models.DecimalField(max_digits=10, decimal_places=4)
    precioventa = models.DecimalField(max_digits=10, decimal_places=2)

    class Meta:
        managed = True
        db_table = 'preciosventalista'
        unique_together = (('idlistaprecio', 'idarticu'),)

serializers.py


class ArticulosSerializer(serializers.ModelSerializer):
    class Meta:
        model = Articulos
        fields='__all__'        

class PreciosVentaListaSerializer(serializers.ModelSerializer):
    articulo = ArticulosSerializer(source='idarticu', read_only=True)
    class Meta:
        model = Preciosventalista
        fields='__all__'    

apiviews.py


class PreciosVentaListaList(generics.ListCreateAPIView):
    queryset = Preciosventalista.objects.all()
    serializer_class = PreciosVentaListaSerializer

class PreciosVentaListaDetalle(generics.RetrieveDestroyAPIView):
    queryset = Preciosventalista.objects.all()
    serializer_class = PreciosVentaListaSerializer

urls.py


urlpatterns = [ 
    path('v1/preciosventalista/', PreciosVentaListaList.as_view(), name='preciosventalista_list'),
    path('v1/preciosventalista/<int:pk>', PreciosVentaListaDetalle.as_view(), name='preciosventalista_detalle')
]

postmanからサービス(/ api / v1 / preciosventalista / 1)を呼び出すときのエラーは次のとおりです。

/ api / v1 / preciosventalista / 1でMultipleObjectsReturnedが複数のPreciosventalistaを返しました-75を返しました!

サービスでインスタンスのセットを返すことも、両方のフィールド(idlistaprice、idarticu)をフィルタリングして単一のインスタンスを返すこともできませんでした。私は結果なしで以下を試しました:

apiviews.py


class PreciosVentaListaDetalle(generics.RetrieveDestroyAPIView):
    queryset = Preciosventalista.objects.all()
    serializer_class = PreciosVentaListaSerializer

    def list(self, request):
        queryset = self.get_queryset()
        serializer = UserSerializer(queryset, many = true)
        return Response(serializer.data)

初心者のミスを犯していることをお詫びしますが、フレームワークを短期間使用している場合は、問題の解決に役立つヘルプやガイダンスをいただければ幸いです。どうもありがとう!

Remco Gerlich

Djangoは複合キーをサポートしていません。フィールドの1つが主キーであることがわかりますが、それはデータベースの現実ではありません(そのフィールドに同じ値を持つ75のレコードがあるため、キーではありません)。

したがって、v1/preciosventalista/<int:pk>使用するバックエンドフレームワークに関係なく、フォームのURLは機能しません。1つの整数では、必要なレコードを指定するのに十分な情報ではありません。

フォームのURLを設定して、v1/preciosventalista/<int:idlistaprecio>/<int:idarticu>両方の番号を把握することができますただし、Djangoは主キーをサポートしていないため、組み込みのRestFramework汎用ビュークラスを使用することはできません。独自のビュークラスを作成する必要があります。

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

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

編集
0

コメントを追加

0

関連記事

TOP 一覧

  1. 1

    セレンのモデルダイアログからテキストを抽出するにはどうすればよいですか?

  2. 2

    CSSのみを使用して三角形のアニメーションを作成する方法

  3. 3

    ZScalerと証明書の問題により、Dockerを使用できません

  4. 4

    ドロップダウンリストで選択したアイテムのQComboBoxスタイル

  5. 5

    別のホストからTomcat Managerアプリにアクセスする

  6. 6

    PyCharmリモートインタープリターはプロジェクトタブにサイトパッケージのコンテンツを表示しません

  7. 7

    Windows 10でのUSB入力デバイスの挿入/取り外しの検出

  8. 8

    Python / SciPyのピーク検出アルゴリズム

  9. 9

    MLでのデータ前処理の背後にある直感

  10. 10

    useRefに反応してコンポーネントをスクロールして表示する

  11. 11

    モーダルダイアログを自動的に閉じる-サーバーコードが完了したら、Googleスプレッドシートのダイアログを閉じます

  12. 12

    パンダは異なる名前の列に追加します

  13. 13

    PictureBoxで画像のブレンドを無効にする

  14. 14

    Windows 10 Pro 1709を1803、1809、または1903に更新しますか?

  15. 15

    Pythonを使用して、リストからデータを読み取り、特定の値をElasticsearchにインデックス付けするにはどうすればよいですか?

  16. 16

    LinuxでPySide2(Qt for Python)をインストールするQt Designerはどこにありますか?

  17. 17

    Material-UIでTextFieldエラーの色を条件付きでオーバーライドする方法

  18. 18

    goormIDEは、ターミナルがロードするデフォルトプロジェクトを変更します

  19. 19

    MatplotlibまたはSeabornを使用して、グループ化されたデータから複数のプロットを生成するにはどうすればよいですか?

  20. 20

    Luaの文字列から特定の特殊文字を削除するにはどうすればよいですか?

  21. 21

    Flutterにファイルピッカープラグインを追加するにはどうすればよいですか?

ホットタグ

アーカイブ