在Django REST框架中,多对多关系不起作用

时间:2017-12-19 10:54:16

标签: python django serialization django-rest-framework many-to-many

我正在尝试创建一个简单的多对多关系。我有两个模型:IP和IPCollection,IP可以属于0个或更多集合,IPCollection由IP地址组成。

在关注文档后,我以为我已经开始工作了。但是,在API界面中创建新集合时,我无法选择现有的IP地址。

关注此帖:Lists are not currently supported in HTML input 我设法解决了这个问题,允许我在从表单中选择现有IP时创建一个新的IPCollection。一切似乎都很好。

但是,一旦我实现了stackoverflow帖子中提供的解决方案,就会出现一个新问题:我无法再检索我的IP了。

我有两个端点:/ ipcollections和/ ips,每当我尝试向/ ips发出GET请求时,我都会收到以下错误:

TypeError at /ips/ __init__() takes 1 positional argument but 2 were given

我一直试图寻找这个问题的解决方案,但到目前为止似乎没有任何效果。

这是在我从其他stackoverflow帖子实现解决方案之后我的序列化工具看起来像:

class IpSerializer(serializers.PrimaryKeyRelatedField, serializers.ModelSerializer):
    class Meta:
        model = Ip
        fields = ('address',)


class IpCollectionSerializer(serializers.ModelSerializer):

    ipAddresses = IpSerializer(many=True, queryset=Ip.objects.all())

    class Meta:
        model = IpCollection
        fields = ('title', 'ipAddresses')

我的模特:

class Ip(models.Model):
    address = models.CharField(max_length=100)

    def __str__(self):
        return self.address

class IpCollection(models.Model):
    title = models.CharField(max_length=100)
    ipAddresses = models.ManyToManyField(Ip, related_name='ipAddresses')

问题似乎是由IpSerializer中的第二个参数引起的,因为它在删除PrimaryKeyRelatedField参数后再次起作用。但我似乎无法让API接口中的HTML表单以除了将此参数添加到IpSerializer之外的任何其他方式工作。

非常欢迎任何关于我可能做错的想法/提示!

0 个答案:

没有答案