У меня есть модель (разрешение), которая позволяет пользователю A дать другому пользователю B некоторые полномочия, такие как создание события для A, в повестке дня A. У каждого объекта разрешения есть два объекта ForeignKey Owner (пользователь A) и authorized_user (пользователь Б) и логическое поле ядра, соответствующее разрешениям.Пользователь A может иметь несколько разрешений, связанных с ним.
Моя проблема: Поскольку поле владельца и поле авторизованного пользователя должны быть недоступны для редактирования или чтения, я сталкиваюсь с некоторыми трудностями при попытке изменить разрешения .
В моем html-шаблоне перечислены все формы или текущие разрешения.
Мои формы редактирования представлены только с логическим полем разрешения.Таким образом, Я не знаю , с каким экземпляром они должны быть связаны , когда мне нужно сохранить сообщение ...
models.py:
class Permission(models.Model):
owner = models.ForeignKey(User, on_delete=models.CASCADE, editable=False)
authorized_user = models.ForeignKey(User, on_delete=models.CASCADE, editable=False)
can_create_event = models.BooleanField(default=False)
can_edit_event = models.BooleanField(default=False)
По соображениям безопасности поля владелец и авторизованный_пользователь должны быть недоступны для редактирования (или только для чтения) .
Пример создания объектов:
owner_user = User.obects.get(username = "User01")
authorized_user_1 = User.obects.get(username = "User02")
authorized_user_2 = User.obects.get(username = "User03")
Permission.objects.create(owner = owner_user, authorized_user = authorized_user_1,
can_create_event=True, can_edit_event = False)
<Permission: Permission from owner User01 linked to User02>
Permission.objects.create(owner = owner_user, authorized_user = authorized_user_2,
can_create_event=False, can_edit_event = True)
<Permission: Permission from owner User01 linked to User03>
forms.py:
class Edit_permission_Form(forms.ModelForm):
class Meta:
model = Permission
fields = '__all__'
У меня есть представления, позволяющие владельцуобъект разрешения для редактирования логического поля.
views.py:
@login_required()
def managepermission(request):
if request.POST:
permission_form = Edit_permission_Form(request.POST)
if permission_form.is_valid():
#I don't know how to link the form to the good instance
permission_form.save()
return redirect('manage')
else:
#Get all the permission object linked to the logged user
actual_permissions = request.user.permission_set.all()
#Get all the username of the authorized users (to display in the template)
authorized_user_username = [permission.user.username for permission in actual_permissions]
#Get all the permission id
#to allow the owner to delete the entry by clinking on the delete link
permission_id = [permission.id for permission in actual_permissions]
#Generate all the forms linked to the permission objects
perm_edit_forms = [Edit_permission_Form(instance=perm) for perm in actual_permissions]
#Store all the data in a dict
data = {}
for i in range(len(actual_permission)):
data[authorized_user_username[i]] = {
"perm_id" : permission_id[i],
"form" : perm_edit_forms[i],
}
return render(request, 'perm/manageperm.html', {'data': data}
manageperm.html:
{% for key, value in data.items %}
{{key}} <a href="/perm/delete_perm/{{value.perm_id}}">Delete</a>
<form method="post" >
{% csrf_token %}
<table>
{{value.form.as_table}}
<tr>
<td><input type="submit" name="submit" value="Modify"/></td>
</tr>
</table>
</form>
{% endfor %}
Итак, у вас естьИдея как связать мою форму с правильным экземпляром , когда представления получают запрос POST?
Дополнительный вопрос: Как я могу более эффективно генерировать мои данные в форме?