python - 禁止直接分配到多对多集合的前端。改用 emails_for_help.set()
问题描述
我是 Django 新手,没有找到有关此问题的任何参考资料。当我在 Django 模型(models.py
)中使用多对多字段时出现此错误。views.py
我猜这个问题是从 form( )中分配 view() 中的 m2m 字段forms.py
。
如何在视图中分配 m2m 字段?( Django version 2.0
, python - 3.5
)
模型.py
class User(AbstractUser):
username=models.CharField(max_length=20)
email = models.EmailField(_('email address'), unique=True)
class Setupuser(models.Model):
organization=models.CharField(max_length=200,blank=False,null=True)
emails_for_help = models.ManyToManyField(User)
视图.py
class Set_user(FormView):
template_name="pkm_templates/set_up_user.html"
form_class = Set_User_Form
success_url = '/thanks/'
def form_valid(self, form):
org = form.cleaned_data.get('organization')
emails = form.cleaned_data.get("emails_for_help")
instance = Setupuser(organization=org,emails_for_help=emails)
instance.save()
return redirect("/")
表格.py
class Set_User_Form(ModelForm):
emails_for_help = forms.ModelMultipleChoiceField(
queryset=User.objects.all(),
widget=forms.CheckboxSelectMultiple
)
class Meta:
model = Setupuser
fields = ["organization","emails_for_help"]
解决方案
您需要获取User
对象,然后将其添加到emails_for_help
字段中。ManyToManyField
创建实例时不能添加对象。看看文档。
class Set_user(FormView):
template_name="pkm_templates/set_up_user.html"
form_class = Set_User_Form
success_url = '/thanks/'
def form_valid(self, form):
org = form.cleaned_data.get('organization')
emails = form.cleaned_data.get("share_email_with")
users = User.objects.filter(email__in=emails)
instance = Setupuser.objects.create(organization=org)
for user in users:
instance.emails_for_help.add(user)
return redirect("/")
另一种方法是使用.set()
.
class Set_user(FormView):
template_name="pkm_templates/set_up_user.html"
form_class = Set_User_Form
success_url = '/thanks/'
def form_valid(self, form):
org = form.cleaned_data.get('organization')
emails = form.cleaned_data.get("share_email_with")
users = User.objects.filter(email__in=emails)
instance = Setupuser.objects.create(organization=org)
instance.emails_for_help.set(users)
return redirect("/")
或者您可以简单地使用.add()
添加任意数量的对象。
class Set_user(FormView):
template_name="pkm_templates/set_up_user.html"
form_class = Set_User_Form
success_url = '/thanks/'
def form_valid(self, form):
org = form.cleaned_data.get('organization')
emails = form.cleaned_data.get("share_email_with")
users = User.objects.filter(email__in=emails)
instance = Setupuser.objects.create(organization=org)
instance.emails_for_help.add(*users)
return redirect("/")
推荐阅读
- wordpress - WC 费用 API 后计算运费
- assembly - 一个简单的 hello world shellcode 中的分段错误?
- c# - 如何使用用户输入名称创建文件?
- r - Check if columns of one data frame are present in another data frame with non-zero element in R
- javascript - 将 DIV 子项更改为无显示
- amazon-web-services - 基于标签的 AWS IAM 政策限制未授予我任何访问权限
- html - 如何在 HTML 中的列表下添加空格
- flutter - setState 仅在我再次调用该操作后才重建页面
- mysql - 找到第一个匹配项后使 MySQL 查询返回/停止执行
- python - 在python中x秒后运行一个函数