ฉันมีสองรุ่นเช่น:
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/')
จากโมเดลข้างต้น ฉันต้องการดึงภาพรถทั้งหมด ดังนั้นฉันจึงเขียน serailzer ของฉันดังนี้:
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', )
แต่ในฟิลด์ภาพถ่ายซีเรียลไลเซอร์ CarSerializer
ให้ข้อผิดพลาดนี้ RelatedField.to_representation() must be implemented for field . If you do not need to support write operations you probably want to subclass
ReadOnlyFieldinstead.
แต่รหัสที่ฉันใช้ PrimaryKeyRelatedField
แทนที่จะเป็น RelatedField มันก็ทำงานได้ดีและฉันได้รับรายการคีย์หลัก แต่ฉันต้องการทุกฟิลด์
ฉันพยายามใช้ CarImageSerializer
เป็นด้วย
ใน Carserializer
ถูกรูปลอก
assets_keys = serializers.SerializerMethodField()
def get_assets_keys(self, obj):
return AssetKeySerializer(obj.asset_keys.all(), context=self.context).data
แต่ไม่สามารถทำให้รายการคีย์สินทรัพย์เป็นอนุกรมได้ แต่ต้องใช้ออบเจ็กต์เดียว
ดังนั้นคำถามของฉันคือเป็นไปได้ไหมที่จะรับข้อมูลวัตถุที่เกี่ยวข้องโดยใช้ซีเรียลไลเซอร์ ถ้าใช่ ฉันต้องแก้ไขอะไรในซีเรียลไลเซอร์ของฉัน
คำตอบของฉันจะต้องมีลักษณะดังนี้:
[
{
"_id": 1,
"name": "first",
"photos": [
"name":"xyz",
"photo":"path_to_photo"
]
},
{
"_id": 1,
"name": "second",
"photos": [
"name":"abcddd",
"photo":"path_to_photo"
]
},
]