3

私はPython-DjangoとWeb開発に非常に慣れていないため、POSTを使用して新しいリソースを作成するというこの特定の問題に行き詰まっています。

REST API に Django REST フレームワークを使用しており、新しいリソースを作成しようとしています。モデルには外部キー関係があり、関連するリソースを一度に作成したいと考えています。質問が明確になるように、サンプルモデル、シリアライザー、およびビューを投稿しています。

** 私のモデルには、多対 1 の関係を持つ 2 つのクラスがあります。

class Carmodel(models.Model):
    modelkey = models.BigIntegerField(primary_key=True)
    makerkey = models.ForeignKey('Carmaker', db_column='makerkey', related_name='models')
    modelname = models.CharField(max_length=1024)

    class Meta:
        db_table = 'carmodel'

class Carmaker(models.Model):
    makerkey = models.BigIntegerField(primary_key=True)
    makername = models.CharField(max_length=1024)

class Meta:
        db_table = 'carmaker'

** 以下のようなシリアライザークラスがあります

class CarmodelSerializer(serializers.ModelSerializer):
    class Meta:
        model = Carmodel
        fields = ('modelkey','makerkey','modelname')

class CarmakerSerializer(serializers.ModelSerializer):
    models = CarmodelSerializer(many=True)
    class Meta:
        model = Carmaker
        fields = ('makerkey','makername','models')

** リソースを作成しようとしているビューは次のようになります

@api_view(['POST'])
def carmaker(request, makerkey, format=None):
    if request.method == 'POST':
        serializer = CarmakerSerializer(data=request.DATA)
        if serializer.is_valid():
            serializer.save()
            return Response(serializer.data, status=status.HTTP_201_CREATED)
        else:
            return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)

** 入力は次のようになり、ネストされた Carmodels とともに Carmaker リソースを作成したいと考えています。

{
    "makerkey": 1, 
    "makername": "lamborghini", 
    "models": [
        {
            "modelkey": 11, 
            "makerkey": 1, 
            "modelname": "reventon" 
        }, 
        {
            "modelkey": 12, 
            "makerkey": 1, 
            "modelname": "aventador" 
        }
    ]
}

**私は次のような応答を得ています

{
    "models": [
        {
            "makerkey": [
                "Invalid pk '1' - object does not exist."
            ]
        }, 
        {
            "makerkey": [
                "Invalid pk '1' - object does not exist."
            ]
        }
    ]
}

単一の POST リクエストでこの種のリソースを作成する方法はありますか? 前もって感謝します

4

1 に答える 1

0

私は同じことに遭遇しました.私の経験から(奇妙なことに)、これらのキーを既に存在する「makerkey」を指すように設定すると、機能します. Carmaker を手動で作成し、新しい「makerkey」を上記の例に向けて、POST を再試行してください。

于 2013-11-21T23:01:25.030 に答える