SerializerDRFに非モデルフィールドを追加する

すみませんマイク

ラスターモデルフィールドと非モデルconfig_versionフィールドを組み合わせて、次のようなシリアライザーにしようとしています。

class RasterPostSerializer(serializers.ModelSerializer):

    class Meta:
        model = Raster
        fields = (
            'name',
            'description',
            'filepath'
        )


class ConfigurationSerializer(serializers.Serializer):
    config_version = serializers.CharField()
    rasters = RasterPostSerializer(many=True)

    def create(self, validated_data):
        data_field = validated_data['rasters']
        for raster in data_field['rasters']:
            return Raster(name=raster['name'], description=raster['description'], filepath=raster['filepath'])

serializer.save()メソッドを使用する前に、view.pyでconfig_versionを確認したいのですが、その後、.save()で次のようになります。

The serializer field might be named incorrectly and not match any attribute or key on the `Raster` instance.
Original exception text was: 'Raster' object has no attribute 'config_version'.

何が起こっているのですか、そしてその解決策はありますか?

編集:私の例のJSON POSTペイロードは次のようになります:

{
  "config_version":"v2",
  "rasters":[
    {
      "name":"XYZ.jpg",
      "description":"some description",
      "filepath":"path in filesystem"
    }
}

config_versionは一定ではありません。ConfigurationSerializerを利用するコントローラーが構成エンドポイントになるため、動的に設定できます。将来、ラスターやその他の情報を追加する可能性があります。

views.pyの構成エンドポイントは次のようになります

@api_view(['POST'])
def configuration(request):

if request.method == 'POST':
    serializer = ConfigurationSerializer(data=request.data)

    if serializer.is_valid():
        if serializer.validated_data['config_version'] is 'v2':

            raster_name_list = [raster.name for raster in Raster.objects.all()]
            for instance in serializer.validated_data['rasters']:
                if instance['name'] in raster_name_list:
                    return Response({"Fail": "Raster name '{}' already exists".format(instance['name'])}, status=status.HTTP_304_NOT_MODIFIED)
            serializer.save()
            return Response(serializer.data, status=status.HTTP_201_CREATED)
    return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
アニーシュRS

作成アクションの結果として、ConfigurationSerializerデータを返す必要があります。そしてまた私はあなたが何をしようとしているのか分かりませんconfig_version

class ConfigurationSerializer(serializers.Serializer):
    config_version = serializers.CharField()
    rasters = RasterPostSerializer(many=True)

    def create(self, validated_data):
        config_version = validated_data.get('rasters')
        rasters = validated_data.pop('rasters')
        raster_list = []
        for raster in rasters:
            raster_list.append(Raster.objects.create(**raster))
        return {
            "config_version": config_version,
            "rasters": raster_list
        }

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

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

編集
0

コメントを追加

0

関連記事

分類Dev

DRF 3のModelSerializerに非モデルフィールドを追加する

分類Dev

Djangoモデルに数値フィールドを追加する

分類Dev

既存のモデルにフィールドを追加する方法

分類Dev

ManyToManyFieldフィールドを既存のモデルに追加する

分類Dev

非永続フィールドをモデルに追加できますか?

分類Dev

Django:非モデルフィールドをserializers.serializeに追加します

分類Dev

Django admin1.9でモデルフィールドを非表示にする

分類Dev

レルムモデルクラスにフィールドを追加する方法

分類Dev

DJANGOモデルに条件付き外部キーフィールドを追加する

分類Dev

既存のモデルにフィールドを追加します

分類Dev

計算フィールドをDjangoモデルに追加する方法

分類Dev

Laravelのモデルに新しいフィールドを追加する

分類Dev

Laravelモデルクエリに計算フィールドを追加する

分類Dev

モデルを継承し、モデルodoo12に新しいフィールドを追加する

分類Dev

djangoのフォームでモデルフィールドを非表示にする

分類Dev

さまざまなモデルの非表示フォームフィールドを動的に作成する(MVC 4)

分類Dev

モンゴイドモデルのembeds_manyフィールドに要素を追加する方法

分類Dev

Djangoグループモデルフィールドを追加する方法

分類Dev

デバイスモデルにフィールドを追加し、それらにform_forを使用する

分類Dev

Omniauthユーザーモデルにフィールドを追加

分類Dev

djangoモデルの外部キーフィールドにデータを追加および更新する方法

分類Dev

シリアル化後にモデルフィールドをオブジェクトに追加する方法

分類Dev

Django:共通フィールドを親モデルに保存する

分類Dev

Django モデル - フィールドを dict に保存する方法

分類Dev

モデルの作成時にユーザーを多対多のフィールドに追加する

分類Dev

年齢を計算するdjango管理モデルにフィールドを自動追加する方法

分類Dev

Yii2モデルにないフォームフィールドを追加する

分類Dev

Odoo-会計モデルに「コード」フィールドを追加する方法

分類Dev

Ruby onRails-モデルのフィールドを別のモデルのフォームに追加します

Related 関連記事

  1. 1

    DRF 3のModelSerializerに非モデルフィールドを追加する

  2. 2

    Djangoモデルに数値フィールドを追加する

  3. 3

    既存のモデルにフィールドを追加する方法

  4. 4

    ManyToManyFieldフィールドを既存のモデルに追加する

  5. 5

    非永続フィールドをモデルに追加できますか?

  6. 6

    Django:非モデルフィールドをserializers.serializeに追加します

  7. 7

    Django admin1.9でモデルフィールドを非表示にする

  8. 8

    レルムモデルクラスにフィールドを追加する方法

  9. 9

    DJANGOモデルに条件付き外部キーフィールドを追加する

  10. 10

    既存のモデルにフィールドを追加します

  11. 11

    計算フィールドをDjangoモデルに追加する方法

  12. 12

    Laravelのモデルに新しいフィールドを追加する

  13. 13

    Laravelモデルクエリに計算フィールドを追加する

  14. 14

    モデルを継承し、モデルodoo12に新しいフィールドを追加する

  15. 15

    djangoのフォームでモデルフィールドを非表示にする

  16. 16

    さまざまなモデルの非表示フォームフィールドを動的に作成する(MVC 4)

  17. 17

    モンゴイドモデルのembeds_manyフィールドに要素を追加する方法

  18. 18

    Djangoグループモデルフィールドを追加する方法

  19. 19

    デバイスモデルにフィールドを追加し、それらにform_forを使用する

  20. 20

    Omniauthユーザーモデルにフィールドを追加

  21. 21

    djangoモデルの外部キーフィールドにデータを追加および更新する方法

  22. 22

    シリアル化後にモデルフィールドをオブジェクトに追加する方法

  23. 23

    Django:共通フィールドを親モデルに保存する

  24. 24

    Django モデル - フィールドを dict に保存する方法

  25. 25

    モデルの作成時にユーザーを多対多のフィールドに追加する

  26. 26

    年齢を計算するdjango管理モデルにフィールドを自動追加する方法

  27. 27

    Yii2モデルにないフォームフィールドを追加する

  28. 28

    Odoo-会計モデルに「コード」フィールドを追加する方法

  29. 29

    Ruby onRails-モデルのフィールドを別のモデルのフォームに追加します

ホットタグ

アーカイブ