gpt4 book ai didi

django - 通过中间类保存 ManyToMany

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

我阅读了很多关于这个问题的链接:

How to save a django model with a manyToMany Through relationship, AND regular manyToMany relationships

How to save a django model with a manyToMany Through relationship, AND regular manyToMany relationships

django manytomany through

包括文档: https://docs.djangoproject.com/en/dev/topics/db/models/#extra-fields-on-many-to-many-relationships

但无法通过中介类保存我的 M2M。

我的模型:

class Promotor(PessoaFisica):
user = models.OneToOneField(User, blank=True, null=True)


class Setor(models.Model):
nome = models.CharField(max_length=255)
promotores = models.ManyToManyField(Promotor, through='Membro', blank=True, null=True)

class Meta:
verbose_name_plural = 'setores'

def __unicode__(self):
return "%s" % (self.nome)

class Membro(models.Model):
promotor = models.ForeignKey(Promotor)
setor = models.ForeignKey(Setor)
data_inclusao = models.DateField(auto_now=True)

保存方法:

def add_setor(request):
form = SetorForm(request.POST or None)
if form.is_valid():
s = form.save()
setor = get_object_or_404(Setor, pk = s.id)
for promotor_id in request.POST.getlist('promotores'):
membro = Membro.objects.create(promotor_id=promotor_id, setor_id=setor.id)
membro.save()
messages.add_message(request, messages.SUCCESS, 'Setor cadastrado com sucesso!')
return HttpResponseRedirect('/project/setor/index/')
return render_to_response('project/setor/form.html', locals(), context_instance=RequestContext(request))

错误是:

Cannot set values on a ManyToManyField which specifies an intermediary model.  Use setor.Membro's Manager instead.

如果 save() 方法提交“false”,则“setor”没有“id”放入 Membro 对象。如何通过中间类保存setor?谢谢!

最佳答案

您的表单中有 promotores 字段链接到模型,因此 save() 尝试将其保存到 m2m 字段。您可以使用 commit=False 保存表单,然后手动保存对象(它不会触及 m2m),然后像现在一样保存 m2m。

附:我猜你应该使用 form.cleaned_data['promotores'] 而不是 request.POST。天知道客户端实际发布了什么。

关于django - 通过中间类保存 ManyToMany,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10238433/

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