Как я могу отправить Message.info от администратора другому пользователю в Django

Когда кто-то из пользователей пытается опубликовать статью. Пользователь должен дождаться одобрения/неодобрения этой статьи от администратора.

после одобрения/неодобрения своих статей пользователи должны получать Message.info. Но эти сообщения показывались на странице администратора, а не на странице пользователя

неодобренное сообщение:

это model.py


class Article(models.Model):
    auther = models.ForeignKey(User, on_delete= models.CASCADE)
    title = models.CharField(max_length= 200, null = False)
    bio = models.CharField(max_length = 450, null = False)
    tags = TaggableManager()
    body = RichTextField()
    created_at = models.DateTimeField(auto_now_add = True)
    updated_at = models.DateTimeField(auto_now = True)
    approved = models.BooleanField('approved', default = 'False')

    
    def __str__(self):
        return self.title


это viws.py :


from django.contrib.auth.models import User
from article.models import Article


def delete_article(request, pk):  
    model_article = apps.get_model('article','Article')
    if request.user.is_superuser:
        id_user = model_article.objects.get(pk = pk).auther_id

        model_article.objects.get(pk = pk).delete()
        messages.info(request,'  تم تنفيذ العملية بنجاح!' )
    for x in User.objects.all():
        if(x.id == id_user):
            messages.info(request,
        'تم حذف مقالك الجديد لأنه يخالف سياسة الموقع !')
            return redirect('main')

Но я хочу, чтобы сообщение отправлялось пользователю, который хочет опубликовать статью

Чтобы показать сообщение пользователю, который хочет опубликовать статью, вы можете использовать фреймворк сообщений Django. Этот фреймворк позволяет задавать сообщения, которые будут показаны пользователю при следующей загрузке страницы.

Чтобы использовать фреймворк сообщений, вам нужно включить промежуточное ПО сообщений в ваш файл настроек Django:

MIDDLEWARE = [
    # ...
    'django.contrib.messages.middleware.MessageMiddleware',
    # ...
]

Вам также нужно будет включить контекстный процессор сообщений в файл настроек Django:

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [],
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                # ...
                'django.contrib.messages.context_processors.messages',
                # ...
            ],
        },
    },
]

После того, как вы настроили каркас сообщений, вы можете использовать функцию messages.add_message для установки сообщения, которое будет показано пользователю при следующей загрузке страницы.

Пример:

from django.contrib import messages

def delete_article(request, pk):  
    model_article = apps.get_model('article','Article')
    if request.user.is_superuser:
        id_user = model_article.objects.get(pk = pk).auther_id

        model_article.objects.get(pk = pk).delete()
        messages.add_message(request, messages.INFO, 'تم تنفيذ العملية بنجاح!')
    for x in User.objects.all():
        if(x.id == id_user):
            messages.add_message(request, messages.INFO, 'تم حذف مقالك الجديد لأنه يخالف سياسة الموقع!')
            return redirect('main')

Чтобы отобразить сообщения пользователю, вам нужно включить тег шаблона messages в ваш шаблон и использовать тег шаблона {% if messages %} для проверки наличия сообщений для отображения.

Например:

{% if messages %}
    <ul class="messages">
        {% for message in messages %}
            <li{% if message.tags %} class="{{ message.tags }}"{% endif %}>{{ message }}</li>
        {% endfor %}
    </ul>
{% endif %}

Это отобразит список сообщений пользователю. Вы можете настроить внешний вид сообщений , используя стили CSS для форматирования элементов ul.messages и li.messages.

Чтобы вывести второе сообщение ('تم حذف مقالك الجديد لأنه يخالف سياسة الموقع !') пользователю, который пытается опубликовать статью, вы можете сделать следующее:

В вашей функции представления delete_article после удаления статьи и отправки Message.info запроса вы можете получить объект User пользователя, создавшего статью, используя поле auther_id:

 user = User.objects.get(id=id_user)

Затем вы можете использовать встроенную в Django систему обмена сообщениями для отправки сообщения пользователю. Для этого вам нужно импортировать модуль messages и использовать функцию add_message.

from django.contrib import messages

#send the message to the user
messages.add_message(request, messages.INFO, 'تم حذف مقالك الجديد لأنه يخالف     سياسة الموقع !')

Чтобы отобразить сообщение пользователю, необходимо включить тег шаблона messages в ваш шаблон и использовать тег шаблона {% if messages %} для проверки наличия сообщений для отображения:

{% if messages %}
    <ul class="messages">
        {% for message in messages %}
        <li{% if message.tags %} class="{{ message.tags }}"{% endif %}>{{ message }}</li>
        {% endfor %}
    </ul>
{% endif %}

Затем вы можете перенаправить пользователя обратно на страницу, где он может просмотреть сообщение.

Вернуться на верх