Как ограничить голосование пользователей по собственной модели

Я использую Django-голосование в качестве приложения для голосования двух моих моделей. У обеих моделей есть поля "автор".

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

Промежуточное программное обеспечение Django - это первое, что приходит мне в голову, но я не понимаю, что это за функция "process_view". Если вы считаете, что промежуточное ПО - правильный путь, не могли бы вы привести пример того, как это сделать.

3 ответа

Решение

Добавьте этот код в любом месте вашего settings.py:

from voting.managers import VoteManager

def check_user(func):
    def wrapper(self, obj, user, vote):
        if obj.user != user:
            return func(self, obj, user, vote)
        else:
            return None
            # or raise some exception
    return wrapper

VoteManager.record_vote = check_user(VoteManager.record_vote)

Я не запускал этот код, возможно, он неправильный, но я надеюсь, что идея ясна

Вместо того, чтобы взламывать промежуточное ПО, почему бы не перенаправить запросы на этот конкретный URI через другое представление? Затем вы можете выполнять любую логику, которая вам нравится, и впоследствии вызывать исходное представление, если это необходимо.

Другая идея - использовать сигнал post_save.

вот так:

from django.db.models.signals import post_save
from voting.models import Vote

def check_user(sender, instance, **kwargs):
    if instance.user == instance.object.user:
        instance.delete()
        # do some other stuff to tell the user it didn't work

post_save.connect(check_user, sender=Vote)

Преимущество делать это против переопределения VoteManager.record_vote является то, что он менее тесно связан с модулем голосования, и если они вносят изменения, это менее вероятно, нарушит ваш код

изменить: как и в ответе Глейдера, вы должны убедиться, что все объекты, по которым вы голосуете, имеют атрибут "пользователь".

Другие вопросы по тегам