gpt4 book ai didi

python - Django - 禁止直接分配到多对多集的前侧

转载 作者:行者123 更新时间:2023-12-01 01:26:27 24 4
gpt4 key购买 nike

我的项目中有这个类:

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()

我的 ._views 中有这个帖子端点:

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)

对于produtos也是如此。

关于python - Django - 禁止直接分配到多对多集的前侧,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53301096/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com