【问题标题】:Django Serializers many to many relationshipDjango Serializers 多对多关系
【发布时间】:2015-05-11 23:03:46
【问题描述】:

我正在一个使用 Angularjs 和 Django 的小项目中工作。我有两个不同的模型及其对应的端点。

class Skills(models.Model):
    skills = models.CharField(max_length=100)

    def __str__(self):
        return self.skills



  class Project(models.Model):
...
    required_skills = models.ManyToManyField(
            Skills, verbose_name="list of skills")
..

这是我的技能终点副本

[
    {
        "id": 1,
        "skills": "Css"
    },
    {
        "id": 2,
        "skills": "HTML5"
    },
    {
        "id": 3,
        "skills": "Java"
    }
]

在首页我有一个使用 $http.post 服务将数据发送到数据库的表单。当我创建项目时,它可能需要一项或多项技能。这就是我困惑的地方,我可以通过发送 pk 来存储我的外键,在这种情况下是 id。但是,由于我正在处理多对多关系,我无法弄清楚什么是最好的处理方式。我已经成功阅读了文档和一些在线资源。此外,该表单有一个包含技能列表的下拉菜单。我使用 $http.get 获得了这个值。请问有人知道如何解决这个问题吗?

http://www.django-rest-framework.org/api-guide/relations/ Serializing ManyToMany in Django Rest Framework (2.3.5) throws ValueError

【问题讨论】:

    标签: django angularjs many-to-many


    【解决方案1】:

    我最近不得不处理类似的情况。 我解决问题的方法是重写序列化程序中的 create 方法,如下所示:

    def create(self, validated_data):
        serviceOffers_data = validated_data.pop('serviceOffers')
    
        def extract_id(s):
          return s['id']
    
        clientfile = Clientfile.objects.create(**validated_data)
        clientfile.serviceOffers.add(*ServiceOffer.objects.filter(id__in=map(extract_id, serviceOffers_data)))
    
        return clientfile
    

    我的 POST 数据如下所示:

    {
        name: 'Hello',
        serviceOffers: [
            {
                id: 1,
                name: 'service offer 1'
            },
            {
                id: 2,
                name: 'service offer 2'
            }
        ]
    }
    

    extract_id 函数不是强制性的。我使用它是因为传入 Json 的结构。您也可以只发送 pk 列表并删除 extract_ids。

    【讨论】:

      猜你喜欢
      • 2012-02-26
      • 1970-01-01
      • 2011-06-02
      • 2012-09-18
      • 2023-03-09
      • 1970-01-01
      相关资源
      最近更新 更多