Предоставьте доступ к администратору для всех филиалов в Django
Я создал сайт дискуссионного форума, где я предоставляю ветки пользователям динамически. При регистрации пользователь может выбрать ветку и после входа в систему, пользователь будет видеть только те сообщения, которые относятся к выбранной им ветке. эта функциональность прекрасно работает для пользователей, но когда я вхожу в панель администратора (я создал панель администратора, где администратор будет управлять сообщениями и ответами. В моем случае администратор является суперпользователем) возникает ошибка DoesNotExist at /forum Register matching query does not exist.
Я знаю, что эта ошибка возникает потому, что я не назначил ни одной ветки для администратора. Но если я назначу администратору какую-либо ветку, то он сможет видеть только сообщения конкретной ветки. Но я хочу, чтобы администратор мог видеть все посты ветки, а не посты конкретной ветки. Есть ли способ сделать это, если да, пожалуйста, помогите мне сделать это
model.py Post model
class Post(models.Model):
user1 = models.ForeignKey(User, on_delete=models.CASCADE, default=1)
post_id = models.AutoField
post_content = models.TextField(max_length=5000,verbose_name="")
timestamp= models.DateTimeField(default=now)
branch=models.CharField(default='',max_length=200)
image = models.ImageField(upload_to="images",default="")
def __str__(self):
return f'{self.user1} Post'
Ответная модель
class Replie(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE, default=1)
reply_id = models.AutoField
reply_content = models.TextField(max_length=5000,verbose_name="")
post = models.ForeignKey(Post, on_delete=models.CASCADE, default='')
timestamp= models.DateTimeField(default=now)
image = models.ImageField(upload_to="images",default="")
def __str__(self):
return f'{self.user1} Post'
view.py просмотр форума
def forum(request):
user = request.user
profile = Profile.objects.all()
user = User.objects.get(id=request.user.id)
data = Register.objects.get(user = user)
user_posts = Post.objects.filter(branch=data.branch).count()
if request.method=="POST":
user = request.user
image = request.user.profile.image
content = request.POST.get('content','')
branch = request.POST.get('branch','')
title = request.POST.get('title','')
post = Post(user1=user, post_content=content, image=image,branch=branch,title=title)
post.save()
messages.success(request, f'Your Question has been posted successfully!!')
return redirect('/forum')
posts = Post.objects.filter(branch=data.branch).order_by('-timestamp')
print(data.branch)
context={
'posts':posts,
'branch':data.branch,
'user_posts':user_posts
}
return render(request, "forum.html",context)
forum.html
{% endblock body %}
Главное, что вы должны сделать отдельные запросы для пользователей, для суперпользователя он должен отображать все ветки, запрос должен быть :
posts = Post.objects.filter(user1__is_superuser=True).order_by('-timestamp')
а для обычного пользователя для отображения выбранных ветвей должно быть:
posts = Post.objects.filter(branch=data.branch).order_by('-timestamp')
Попробуйте этот вид:
def forum(request): profile = Profile.objects.all() data = Register.objects.get(user=request.user.id) user_posts = Post.objects.filter(branch=data.branch).count() if request.method == "POST": user = request.user image = request.user.profile.image content = request.POST.get('content', '') branch = request.POST.get('branch', '') title = request.POST.get('title', '') post = Post(user1=user, post_content=content, image=image, branch=branch, title=title) post.save() messages.success( request, f'Your Question has been posted successfully!!') return redirect('/forum') if request.user.is_superuser: posts = Post.objects.filter(user1__is_superuser=True).order_by('-timestamp') else: posts = Post.objects.filter(branch=data.branch).order_by('-timestamp') print(data.branch) context = { 'posts': posts, 'branch': data.branch, 'user_posts': user_posts } return render(request, "forum.html", context)