Рабочий процесс указан ниже
- Пользователь что-то опубликовал. исходный статус сообщения не опубликован (is_published = False)
- Администратор одобряет сообщение. поэтому статус публикации опубликован (is_published = True)
- когда публикуется статус сообщения (is_published = True), пользователь не
возможность редактировать пост.
- Чтобы иметь возможность редактировать, сообщение должно быть неопубликовано (is_published = False). Затем пользователь может редактировать сообщение. Требуется подтверждение администратора снова.
def edit_post(request, post_id):
if request.method == 'POST':
# adminn start here
if request.user.is_staff or request.user.is_superuser:
obj = post.objects.get(pk=post_id)
form = PostForm(request.POST, request.FILES, instance=obj)
if form.is_valid():
post = form.save(commit=False)
post.submitted = obj.submitted
post.save()
return redirect(approved_post)
else:
print("form invalid. post. admin")
# admin end here
#user star here
else:
obj = post.objects.get(pk=post_id)
form = PostForm(request.POST, request.FILES, instance=obj)
# check post status. if published cant edit
if obj.is_published:
print("no permission . user")
return redirect(approved_post) # error page here
else:
if form.is_valid():
post = form.save(commit=False)
post.submitted = request.user
post.save()
return redirect(approved_post)
else:
print("form invalid. post. user")
# GET
else:
obj = post.objects.get(pk=post_id)
# checking is user is admin or normal user
if not request.user.is_staff or not request.user.is_superuser:
#checking if post is belong to the logged in user
if obj.submitted == request.user:
form = PostForm(instance=obj)
else:
print("not your object")
else:
form = PostForm(instance=obj)
return render(request, 'post/edit_post.html', {'form': form})
Меня беспокоит, есть ли лучший способ реализовать это.