我正在尝试创建一个简单的多对多关系。我有两个模型: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之外的任何其他方式工作。
非常欢迎任何关于我可能做错的想法/提示!