Мое промежуточное ПО Django работает не так, как должно - PullRequest
1 голос
/ 05 ноября 2019

Как мне передать reason в banned.html из модели UserBanning из файла промежуточного программного обеспечения? Почти все работает, но я не могу получить reason от модели для отображения в шаблоне banned.html, и я не уверен, так что любая помощь будет удивительной, только если вы узнаете о промежуточном программном обеспечении. Должен ли я использовать process_request() вместо этого?

Спасибо

models.py:

from django.db import models
from django.contrib.auth.models import User
from django.conf import settings

class UserBanning(models.Model):
    user = models.ForeignKey(User, verbose_name="Username", help_text="Choose Username", on_delete=models.CASCADE)
    ban = models.BooleanField(default=True, verbose_name="Ban", help_text="Users Bans")
    reason = models.CharField(max_length=500, blank=True)

    class Meta:
        verbose_name_plural = "User Banning"
        ordering = ('user',)

    def __str__(self):
        return f"{self.user}"

middleware.py:

from .models import UserBanning
from django.shortcuts import render


class BanManagement():
    def __init__(self, get_response):
        self.get_response = get_response

    def __call__(self, request):
        banned = UserBanning.objects.all()
        context = {
            'banned': banned,
        }

        if(banned.filter(ban=True, user_id=request.user.id)):
            return render(request, "account/banned.html", context)
        else:
        response = self.get_response(request)
        return response

забанены. html:

{% extends "base.html" %}

{% block content %}
<p>Your account has been banned. Reason: {{ banned.reason }}</p>
{% endblock content %}

1 Ответ

0 голосов
/ 06 ноября 2019

Вы почти закончили. Оставшаяся проблема заключается в том, что вам нужно filter на request.user.id, прежде чем устанавливать context, чтобы контекст содержал только запрет конкретного пользователя. Что-то вроде:

    banned = UserBanning.objects.filter(ban=True, user=request.user)

    if banned:
        context = {'banned': banned[0]}
        return render(request, "account/banned.html", context)
    else:
...