プロジェクトの要件は、既存のデータベースから開始することです。複合キーを持つテーブルがあります。このデータベースからモデルを生成するとき、フィールドは主キーとして残され、以前に複合キーを形成した両方のフィールドに固有の制約が残されました。
次に例を示します。
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)
初心者のミスを犯していることをお詫びしますが、フレームワークを短期間使用している場合は、問題の解決に役立つヘルプやガイダンスをいただければ幸いです。どうもありがとう!
Djangoは複合キーをサポートしていません。フィールドの1つが主キーであることがわかりますが、それはデータベースの現実ではありません(そのフィールドに同じ値を持つ75のレコードがあるため、キーではありません)。
したがって、v1/preciosventalista/<int:pk>
使用するバックエンドフレームワークに関係なく、フォームのURLは機能しません。1つの整数では、必要なレコードを指定するのに十分な情報ではありません。
フォームのURLを設定して、v1/preciosventalista/<int:idlistaprecio>/<int:idarticu>
両方の番号を把握することができます。ただし、Djangoは主キーをサポートしていないため、組み込みのRestFramework汎用ビュークラスを使用することはできません。独自のビュークラスを作成する必要があります。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加