Как можно обновить данные многих полей
я пытаюсь обновить данные многих полей в django.
Вот мое мнение:
def editRolesView(request, role_id, shop_id):
shopId = get_object_or_404(Shop, pk=shop_id)
roleId = get_object_or_404(Roles, pk=role_id)
permissions = Permission.objects.filter(
shop=shopId.id,
)
if shopId.user == request.user:
if request.method == "POST":
permissions = request.POST.getlist("permissions")
# cnv_pp = ''.join(permissions)
roleId.role_title = request.POST.get("role_title")
roleId.shop = Shop.objects.get(id=shopId.id)
roleId.save()
roleId.permissions = roleId.permissions.set(permissions)
roleId.save()
return HttpResponse("Edited")
# roleId.permissions_set.all()
args = {
"shopId": shopId,
"roleId": roleId,
"permissions": permissions,
}
return render(request, "roles/edit-role.html", args)
else:
return redirect("warning")
Здесь я попытался обновить данные manytomanyfield. Вот моя модель
class Permission(models.Model):
shop = models.ForeignKey(Shop, on_delete=models.SET_NULL, null=True)
permission_title = models.CharField(max_length=255)
class Meta:
ordering = ["-id"]
def __str__(self):
return self.permission_title
class Roles(models.Model):
shop = models.ForeignKey(Shop, on_delete=models.SET_NULL, null=True)
role_title = models.CharField(max_length=255)
permissions = models.ManyToManyField(Permission)
class Meta:
ordering = ["-id"]
def __str__(self):
return self.role_title
Всякий раз, когда я пытаюсь сохранить данные, он говорит об этой ошибке:
Direct assignment to the forward side of a many-to-many set is prohibited. Use permissions.set() instead.
Данные сохраняются, но выдает ошибку. Есть ли способ решить эту проблему?
Вот мой шаблон
<form action="" method="POST">
{% csrf_token %}
<label>Set Role Title</label></br>
<input type="text" name="role_title" value="{{ roleId.role_title }}"><br>
{% for p in roleId.permissions.all %}
<input checked type="checkbox" name="permissions" value="{{ p.id }}">
{{ p.permission_title }}<br>
{% endfor %}
{% for pp in permissions %}
{% if not pp in roleId.permissions.all %}
<input type="checkbox" name="permissions" value="{{ pp.id }}">{{ pp.permission_title }}
{% else %}{% endif %}
{% endfor %}
<button type="submit">Save</button>
</form>