Django Rest Framework: вложенный сериализатор для дублирующихся строк, в случае внешнего ключа - PullRequest
0 голосов
/ 27 октября 2019

serializer.py

class Car(serializers.ModelSerializer):
    geography=Geography(read_only=True)

    class Meta:
        model = Car
        fields = ['car_id', 'geography']

models.py

 class Car(models.Model):
      car_id = models.IntegerField(null=False)
      geography = models.ForeignKey('Geography' ,on_delete=models.CASCADE)

объект, который я хочу:

 [
{
    "car_id": 1,
    "geography":[ {
        "key": 1,
        "name": "India"},

    {"key": 1,
          "name": "China"
}
   ]        
 } 
]

объект, который я получаю:

[
{
    "car_id": 1,
    "geography": {
        "key": 1,
        "name": "India"}

}
]

Данные, с которыми я работаю, имеют дублирующиеся значения для атрибутов car_id и key. У меня есть еще одно недоразумение, должен ли это быть внешний ключ или поле «многие ко многим». Любая помощь будет оценена

1 Ответ

0 голосов
/ 27 октября 2019

Вы объявляете geography как ForeignKey в Car. На естественном языке это означает Одна машина принадлежит к Географии , в то время как в описании вашей проблемы это больше похоже на Одна машина имеет много для Географии , который связан с M2M.

Итак ... в ваших моделях оно должно быть:

class Car(models.Model):
      car_id = models.IntegerField(null=False)
      geographies = models.ManyToManyField('Geography' ,on_delete=models.CASCADE)
      # take care: I changed field's name

, а в вашем сериализаторе:

class Car(serializers.ModelSerializer):
    geographies=Geography(read_only=True, many=True)

    class Meta:
        model = Car
        fields = ['car_id', 'geographies']
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...