Masalah dalam mengambil Daftar objek terkait di Serilazier

Saya punya dua model seperti:

class Car(models.Model):
    name = models.CharField(max_length=255)

class CarImage(models.Model):
    car = models.ForeignKey(Car, related_name='photos')
    photo = models.ImageField(upload_to='car/')

Dari model di atas saya ingin mengambil semua gambar mobil. Jadi saya menulis serailzer saya sebagai berikut:

class CarSerializer(serializers.ModelSerializer):
    """
    """
    _id = serializers.ReadOnlyField(source='pk')

    photos = serializers.RelatedField(many=True, read_only=True)

    class Meta:
        model = Car
        fields = ('my_field_here', )

class CarImageSerializer(serializers.ModelSerializer):
    """

    """
    _id = serializers.ReadOnlyField(source='pk')

    class Meta:
        model = CarImage
        fields = ('my_field_here', )

Tetapi di CarSerializer bidang foto serializer memberikan kesalahan ini RelatedField.to_representation() must be implemented for field . If you do not need to support write operations you probably want to subclassReadOnlyFieldinstead. Tapi id saya menggunakan PrimaryKeyRelatedField alih-alih Bidang Terkait maka itu berfungsi dengan baik dan saya mendapatkan daftar kunci utama tetapi saya ingin semua bidang.

Saya juga mencoba menggunakan CarImageSerializer sebagai

Dalam Carserializer dideklarasi

assets_keys = serializers.SerializerMethodField()
def get_assets_keys(self, obj):
    return AssetKeySerializer(obj.asset_keys.all(), context=self.context).data

Tapi itu tidak bisa membuat serial daftar kunci aset, itu membutuhkan objek tunggal.

Jadi pertanyaan saya adalah apakah mungkin untuk mendapatkan data objek terkait menggunakan serializer. Jika ya, apa yang perlu saya perbaiki di serializer saya?

Tanggapan saya harus terlihat seperti:

[
  {
    "_id": 1,
    "name": "first",
    "photos": [
      "name":"xyz",
      "photo":"path_to_photo"
    ]
  },
   {
    "_id": 1,
    "name": "second",
    "photos": [
      "name":"abcddd",
      "photo":"path_to_photo"
    ]
  },
]

person user5594493    schedule 05.04.2016    source sumber


Jawaban (1)


Anda perlu menggunakan serialisasi bersarang di CarSerializer:

photos = CarImageSerializer(many=True, read_only=True)
person AKS    schedule 05.04.2016
comment
Ya, saya mengetahuinya setelah beberapa waktu, awalnya saya tidak menggunakan Many=True, hanya satu pertanyaan lagi, saya juga bisa menggunakan serializer yang sama untuk POST & PUT kan? - person user5594493; 05.04.2016
comment
Secara default, serializer bersarang hanya dapat dibaca. Untuk lebih detailnya Anda dapat melihat jawaban saya yang lain di sini. - person AKS; 05.04.2016