Предоставьте доступ к администратору для всех филиалов в 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)
Вернуться на верх