【发布时间】:2020-01-11 06:58:17
【问题描述】:
我有一个用户列表,他们旁边都有一个复选框。所有被选中的用户都应该被添加到数组中,然后通过 Django 的 post 请求发送到数据库。
这是一张照片:
底部的按钮是提交按钮。
型号:
class UserProfile(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE)
color = models.CharField(max_length=25, default="", blank=True)
class Studyplan(models.Model):
name = models.CharField(max_length=100, null=True)
description = models.CharField(max_length=1000, null=True)
parent_assignment = models.ForeignKey(Assignment, blank=True, on_delete=models.CASCADE,related_name="studyplan", null=True)
deadline = models.DateField(default=date.today, null=True)
students = models.ManyToManyField(UserProfile, blank=True, related_name="studyplan_students", null=True)
teachers = models.ManyToManyField(UserProfile, blank=True, related_name="studyplan_teachers", null=True)
canview = models.ManyToManyField(UserProfile, blank=True, related_name="studyplan_canview", null=True)
notes = models.ManyToManyField(Note, blank=True, related_name="studyplan", null=True)
tasks = models.ManyToManyField(Task, blank=True, related_name="studyplan", null=True)
messages = models.ManyToManyField(Message, blank=True, related_name="studyplan", null=True)
观看次数:
@login_required
def skapa_studieplan(request):
if request.method == 'POST':
name = request.POST.get('Studyplan-Name')
description = request.POST.get('Studyplan-Description')
parent_assignment = Assignment.objects.get(pk=request.POST.get('Studyplan-PAID'))
users = UserProfile.objects.all()
instance = Studyplan.objects.create(request.POST.get('Studyplan-Canview'))
for user in users:
instance.canview.add(user)
studyplan = Studyplan(name=name, description=description, parent_assignment=parent_assignment, canview=instance)
studyplan.save()
return redirect('allaStudieplaner')
我的问题是我无法将 ManyToManyField 中的值放入 POST 请求中。
我收到与此类似的错误:禁止直接分配到多对多集合的前端。请改用 emails_for_help.set()
选择模式:
{% for elev in elever %}
<div class="custom-control custom-checkbox">
<span class="d-flex align-items-center">
<div style="margin-right: 10px">
<div class="circle" style="background-color: {{ elev.color }}">
<span class="initials" , style="color: #ffffff"> {{ elev.user|capfirst|first }}
</span>
</div>
</div>
<div style="width: 300px">
<span class="h6 mb-0" data-filter-by="text">{{elev.user|capfirst}}</span>
</div>
<div class="checkboxx"> <input type="checkbox" name="Studyplan-Canview" value= "{{ student.name }}">
<style>
.checkerName {
margin-left: 10px
}
.checkboxx {
align-content: flex-end;
margin-left: 300px
}
</style> </div>
</span>
</label>
</div>
{% endfor %}
【问题讨论】:
-
您能否删除您的 HTML 图片,然后将选择小部件粘贴到选择用户的位置?其余的都无关紧要。而且你能告诉使用你要问的领域吗?您的模型中有许多 ManyToMany 字段,我们不知道您尝试将哪一个分配给在 HTML 表单中选择的用户。
-
http.post 中的 canview 字段,我想要一个我选择的所有用户输入的数组。我将粘贴选择小部件!
-
那么,如果您查看浏览器开发工具、网络选项卡,您的 POST 请求是什么样的?查看提交的值。还要在调试器中查看
request.POST。 -
正如错误所说,您不能将值直接分配给 M2M 字段,您必须使用
set()或add()。请阅读并练习 this 以了解如何使用 M2M 关系。 -
我都尝试了好几个小时,你能举个例子吗?
标签: django database django-templates