Django-禁止直接分配给多对多集合的前端



我的项目中有这样的类:

class ManejoEventoSanitario(models.Model):
id_evento_sanitario = models.AutoField(primary_key=True)
id_tipo_evento = models.ForeignKey(TipoEvento, on_delete=models.PROTECT)   
descricao = models.CharField(max_length=90, blank=True, null=True)
dt_evento_sanitario = models.DateField(blank=True, null=True)
dt_prox_evento = models.DateField(blank=True, null=True)
responsavel = models.ForeignKey(Pessoa, on_delete=models.PROTECT)   
animais = models.ManyToManyField(Animal)
produtos = models.ManyToManyField(DoseProduto)
objects = models.Manager()

我有这个后端点在我的_视图:

class ApiEventoSanitarioAnimal(APIView):
def post(self, request, format=None):
data_evento = request.POST['data_evento']
tipo_evento = request.POST['tipo_evento']
responsavel = request.POST['responsavel']
descricao = request.POST['descricao']
data_proximo_evento = request.POST['data_proximo_evento']
animais_json = jsonpickle.decode(request.POST['animais'])
produtos_json = jsonpickle.decode(request.POST['produtos'])
tipo_evento = get_object_or_404(TipoEvento, id_tipo_evento=tipo_evento)
responsavel = get_object_or_404(Pessoa, id_pessoa=responsavel)
animais = set()
for animal_json_id in animais_json:
animal = get_object_or_404(Animal, id_animal=animal_json_id)
animais.add(animal)
dose_quantidade_produtos = set()
for produto_json in produtos_json:
produto = get_object_or_404(Produto, id_produto=produto_json['id'])
unidade_medida = Unidade.objects.filter(descricao=produto_json['unidade']).first()
dose_quantidade = produto_json['dose']
dose_produto = DoseProduto()
dose_produto.id_produto = produto
dose_produto.id_unidade_medida = unidade_medida
dose_produto.quantidade = dose_quantidade
dose_produto.save()
dose_quantidade_produtos.add(dose_produto)
m_evento_sanitario = ManejoEventoSanitario()
m_evento_sanitario.dt_evento_sanitario = data_evento
m_evento_sanitario.id_tipo_evento = tipo_evento
m_evento_sanitario.responsavel = responsavel
m_evento_sanitario.descricao = descricao
m_evento_sanitario.save()
#Adiciono os animais e produtos ao evento sanitario cadastro
m_evento_sanitario.animais = animais
m_evento_sanitario.produtos = dose_quantidade_produtos
m_evento_sanitario.save()
return Response(status=status.HTTP_200_OK)

我想做的是:

  • 创建ManejoEventoSanitario(这是现实生活中的一个事件(
  • 把参加这次活动的动物放进去
  • 放置将在此次活动中使用的产品

但是当代码到达该部分时:

m_evento_sanitario.animais = animais
m_evento_sanitario.produtos = dose_quantidade_produtos
m_evento_sanitario.save()

它抛出这个错误:

TypeError: Direct assignment to the forward side of a many-to-many set is prohibited. Use animais.set() instead.

我也试过作为一个列表,但它不起作用。animais和dose_quantidades_produtos已经是一套了。

拜托,我做错了什么?

没有理由把它们放在一个集合中。将m_evento_sanitario的创建移动到这些循环之前,然后对于每个循环,而不是将其添加到集合,将其直接添加到m2m:

for animal_json_id in animais_json:
animal = get_object_or_404(Animal, id_animal=animal_json_id)
m_evento_sanitario.animais.add(animal)

并且类似地用于CCD_ 2。

最新更新