2017-04-04 1 views
0

저는 django를 사용하여 작은 블로그를 만들고 있습니다. 게시물 작성자가 자신의 게시물을 삭제하고 업데이트 할 수있는 기능을 만들고 싶습니다. 그런 다음 장고에 일반보기로 LoginMixin이 있지만 로그인하지 않은 사용자 만 차단합니다.Django는 특정 사용자에게만 제한된 일반 업데이트보기를 작성합니다.

내 문서 모델이 일반 기사 상세보기입니다

class Article(models.Model): 
    author = models.ForeignKey(User) 
    updated = models.DateTimeField(auto_now=True) 
    created = models.DateTimeField(auto_now_add=True) 
    title = models.CharField(max_length=50) 
    context = models.TextField() 

    genre_choice = (('O','Others'),('P','Programming'),('L','Learning'),('E','Entertainment')) 

    genre = models.CharField(max_length=2,choices=genre_choice,default='O') 
    def __str__(self): 
     return "{} - {}".format(self.title,self.author) 

    def get_absolute_url(self): 
     return reverse("article-detail",args=str(self.id)) 

이하 같다.

class ArticleDetail(DetailView): 
    model = Article 
내가 먼저 상세 템플릿이 같은 것을 추가 할

:

{% if article.author == user.username%} 
<!-- Some a tag that directs to the update view --> 
{% endif %} 

그런 다음 나는 이것이 바로 태그를 숨 깁니다 실현, 그것은 업데이트 URL을 눌러 다른 사용자를 중지 할 수 있습니다 단순히 URL을 변경하십시오.

django는 일반 뷰를 사용하여 원래 사용자에게 업데이트 및 삭제 권한을 제한 할 수 있습니까? 직접 업데이트 URL을 입력하더라도 거부됩니다.

답변

2

사용자가 UpdateViewget_queryset을 덮어 쓰기 만하면 사용자가 작성한 항목에만 액세스 할 수 있습니다. LoginRequiredMixin을 사용하여 로그인 한 사용자 만보기에 액세스 할 수 있는지 확인하십시오.

템플릿에서
from django.contrib.auth.mixins import LoginRequiredMixin 

class UpdateArticle(LoginRequiredMixin, UpdateView): 
    model = Article 

    def get_queryset(self): 
     queryset = super(UpdateArticle, self).get_queryset() 
     queryset = queryset.filter(author=self.request.user) 
     return queryset 

, 내가 링크를 표시할지 여부를 결정하는 것은 사용자의 기본 키를 사용하여 author_id을 비교하는 것이다.

{% if article.author_id == user.pk %} 
+0

그래! 감사합니다!이 실제로 문제를 해결을 표시하지 있는지 확인하기 위해 자신의 믹스 인/장식을 만드는 것입니다! – honesty1997

+0

이제 작성자가 아닌 업데이트 URL을 터치하려고하면 404 오류가 표시됩니다. – honesty1997

+0

예, 맞습니다. 저자에게만 업데이트 링크를 보여주고 싶기 때문에 괜찮을 거라고 생각했습니다. 이것은 장고에서의 전형적인 접근법입니다. 404 대신 권한 거부 메시지를 표시하려면 다른 접근 방식을 시도해야하며 코드가 더 복잡 할 것입니다. – Alasdair

0

하나의 옵션은 로그인 한 사용자가 저자 인 경우/다시로드 메시지 등

관련 문제