需要发布许多项目一次-许多标题-在标题列表中从移动的应用程序到后端,问题是当使用创建方法内的循环,它得到的数据库中没有记录&该类型错误-直接赋值给一个多对多集的前端是禁止的。使用container.set()代替。-当尝试使用set()方法时,它没有显示任何正确的大小写!!!!,问题是何时使用create以便在多对多关系中创建多个create对象。请指导。
models.py
class Container(models.Model):
name = models.CharField(max_length=200, blank=False)
capacity = models.IntegerField( null=False ,blank=False)
class Item(models.Model):
title = models.CharField(max_length=200, blank=False)
container = models.ManyToManyField(container)
serializers.py
class ContainerSerializer(serializers.ModelSerializer):
class Meta:
model = Container
fields = '__all__'
class ItemSerializer(serializers.ModelSerializer):
class Meta:
model = Item
fields = '__all__'
请求
{
"container": {
"name": "container1",
"capacity": 10,
},
"Items":[
{"title":"tl1",},
{"title":"tl2",},
{"title":"tl3",}
]
}
view.py
@api_view(['POST'])
def additems(request):
data = request.data
container = Container.objects.create(
name = data['name']
capacity = data['capacity']
)
container.save()
for i in Items:
item = Item.objects.create(
container = container ,
title = i['title'] ,
)
item.save()
serializer = ContainerSerializer(container, many=False)
return response(serializer.data)
TypeError:禁止直接赋值给多对多集的前端。请改用container.set()。为什么出现此错误?!!!请指导...
1条答案
按热度按时间b1zrtrql1#
出现此错误的原因是,您试图在for循环中使用
create()
方法创建Container
对象并将其分配给Item
模型上的ManyToManyField
。这将导致为循环的每次迭代创建新容器,而这不是您所希望的。此外,当尝试将Item
对象添加到与Container
对象的多对多关系中时,应该使用add()
方法,而不是set() method
。可以如下所示重构view
在
ContainerSerializer
中,需要将ItemSerializer
指定为嵌套序列化器,以便正确序列化通过多对多关系与Container
关联的Item
对象,如下图所示: