【问题标题】:Django Rest Framework: nested serializer for duplicate rows, in the case of foreign keyDjango Rest Framework:重复行的嵌套序列化程序,在外键的情况下
【发布时间】:2019-10-27 10:32:14
【问题描述】:

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 属性的重复值。我还有另一个困惑是应该是外键还是多对多字段。任何帮助将不胜感激

【问题讨论】:

    标签: django-rest-framework foreign-keys many-to-many drf-nested-routers drf-queryset


    【解决方案1】:

    您将geography 声明为Car 中的ForeignKey。 在自然语言中,这意味着一辆汽车属于地理, 而在您的问题描述中,它更像是一辆车有很多到地理,这与 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']
    

    【讨论】:

    • 我尝试了多对多关系,但现在在将数据导入 postgresql 时出现错误,它还为多对多字段本身创建了另一个表
    猜你喜欢
    • 2018-05-08
    • 1970-01-01
    • 1970-01-01
    • 2014-08-20
    • 1970-01-01
    • 2016-02-09
    • 2018-07-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多