gpt4 book ai didi

python - 使用 Django 中的 ManyToManyField 的特定参数在表单中自定义查询

转载 作者:太空宇宙 更新时间:2023-11-04 08:46:20 25 4
gpt4 key购买 nike

我有一个名为 projects 的应用程序。其中一个字段是 contributors,其中用户列表存储在 ManyToManyField 中。我试图使在列表中添加和删除用户成为可能。使用 ModelChoiceField 添加所有用户的已传递查询集非常容易。从列表中删除用户仍然让我望而却步。我想了解的是如何以及在何处传递附加参数,以便我可以处理表单中的查询,因此它将仅列出来自特定项目的用户。

添加用户

模型.py

# Model for projects
class Project(models.Model):
...
contributors = models.ManyToManyField(User, blank=True)
...

表单.py

class AddUserForm(forms.Form):
user = forms.ModelChoiceField(queryset=User.objects.all())

class Meta:
model = Project
fields = [
"user",
]

views.py

# Add task to a project
@login_required()
def projects_adduser(request, id):

# Fetch the project if it exists
project = get_object_or_404(Project, id=id)

# Form for adding users to contributors list
form = AddUserForm(request.POST or None)

# Validate the form
if form.is_valid():
user = form.cleaned_data.get("user")
project.contributors.add(user)
project.save()
messages.success(request, "User successfully added to project!")
return HttpResponseRedirect(project.get_edit_url())

# Context dict to return for template
context = {
"title": "Add user to project: " + project.title,
"form": form,
"instance": project,
}
return render(request, template + '/form.html', context)

最佳答案

您可以将初始用户查询集传递给这样的表单:

form = AddUserForm()
form.fields["user"].queryset = User.objects.filter(project=project)

此外,您不需要调用 project.save()project.contributors.add(user) 已经在执行查询以添加 m2m 连接

关于python - 使用 Django 中的 ManyToManyField 的特定参数在表单中自定义查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40188546/

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