자신의 모델에 대한 투표를 제한하는 방법
-
05-07-2019 - |
문제
Django-Voting을 두 모델의 투표 신청서로 사용하고 있습니다. 이 두 모델에는 필드 "저자"가 있습니다.
Django-Voting 앱을 수정하지 않고이 특정 사용자를 작성자로 설정 한 모델에서 사용자가 투표하는 것을 어떻게 제한 할 수 있습니까?
Django Middleware는 내 마음에 가장 먼저 오는 것이지만 "Proces_view"기능이라는 것을 이해하지 못합니다. 미들웨어가 올바른 방법이라고 생각한다면 어떻게 해야하는지에 대한 예를 들어 주시기 바랍니다.
해결책
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)
이 작업의 이점 vs 우발적 인 이점 VoteManager.record_vote
투표 모듈과 덜 결합되어 있고 변경하면 코드를 끊을 가능성이 적습니다.
편집하다: Glader의 답변에서와 같이, 투표하는 모든 객체에 '사용자'속성이 있는지 확인해야합니다.
제휴하지 않습니다 StackOverflow