2017-12-01 1 views
1

MyPosts라는 두 가지 모델 : 회원 및 블로그가 있습니다. Facebook 프로필 페이지처럼 보이는 회원 정보 페이지가 있는데 거기에 사용자의 게시물을 나열하고 싶습니다. 어떻게해야합니까?Django - 다른보기에서 블로그 게시물을 나열하십시오.

내 회원 모델 :

class Member(models.Model): 
user = models.ForeignKey(User, on_delete=models.CASCADE, related_name='members') 
member_name = models.CharField(max_length=120) 
member_adress = models.CharField(max_length=200) 
. 
. 
slug = models.SlugField(max_length=140, unique=True) 
etc. 

    def __str__(self): 
    return self.member_name 

def get_absolute_url(self): 
    return reverse('memberships:dashboard') 

def _get_unique_slug(self): 
    slug = slugify(self.member_name) 
    unique_slug = slug 
    num = 1 
    while Member.objects.filter(slug=unique_slug).exists(): 
     unique_slug = '{}-{}'.format(slug, num) 
     num += 1 
    return unique_slug 

def save(self, *args, **kwargs): 
    if not self.slug: 
     self.slug = self._get_unique_slug() 
    super().save() 

내 블로그 모델 :

class MyPosts(models.Model): 
user = models.ForeignKey(Member, on_delete=models.CASCADE, blank=False, null=True, related_name='postcreator') 
title = models.CharField(max_length=120) 
content = models.TextField(max_length=240) 
publishing_date = models.DateTimeField(auto_now_add=True) 
update_date = models.DateTimeField(auto_now=True) 
slug = models.SlugField(max_length=140, unique=True, blank=False, null=True) 

def __str__(self): 
    return self.title 

class Meta: 
    ordering = ['-publishing_date', 'id'] 

내 상세 페이지보기 :

def MemberDetailView(request,pk, slug): 
try: 
    infos = Member.objects.get(pk=pk, slug=slug) 
except Member.DoesNotExist: 
    raise Http404("Member does not exist") 
post_list = MyPosts.objects.filter(user=self.request.user.id) # this gives a self error 


return render(request, 'directory/member-detail.html', {'memberinfo':infos}, {'memberposts':post_list}) 

어떻게 거기에 내 게시물보기을 추가 할 수 있습니다 볼 수 그것들은 같은 "회원 - 세부 사항"페이지에 있습니까?

답변

3

보기에는 두 가지 문제가 있습니다.

첫째, MemberDetailView은보기 기능이며 클래스 기반보기가 아닙니다. 따라서 이 아니라 request을 사용해야합니다. request.user.id ~ request.user을 단순화 할 수 있습니다.

둘째, 렌더를 호출 할 때 컨텍스트는 단일 사전에 있어야합니다. 당신이 더보기를 개선하려면

def MemberDetailView(request, pk, slug): 
    try: 
     infos = Member.objects.get(pk=pk, slug=slug) 
    except Member.DoesNotExist: 
     raise Http404("Member does not exist") 
    post_list = MyPosts.objects.filter(user=request.user) 
    return render(request, 'directory/member-detail.html', {'memberinfo':infos, 'memberposts':post_list}) 

, 내가 member_detail_view로 이름을 변경하는 것이 좋습니다 함수 이름에 대한 PEP8 스타일 가이드하였습니다. get_object_or_404을 사용하여 코드를 단순화 할 수도 있습니다.

from django.shortcuts import get_object_or_404 

def member_detail_view(request, pk, slug): 
    infos = get_object_or_404(Member, pk=pk, slug=slug) 
    post_list = MyPosts.objects.filter(user=request.user) 
    return render(request, 'directory/member-detail.html', {'memberinfo':infos, 'memberposts':post_list}) 
+0

답장을 보내 주셔서 대단히 감사합니다. 그러나 "user = request.user"를 시도하면 "AnonymousUser '객체가 반복 가능하지 않습니다"라는 오류가 계속 표시됩니다. "user"대신에 user = request.user.id 만 시도하면 빈 페이지가 나타납니다. 내 html로 가득 차 있지만 db에서 가져온 내용은 ​​없습니다. 내가 로그인 한 사용자가 아니기 때문에 나는 그것을 생각한다. 로그인하면 "xyz를 쿼리 할 수 ​​없습니다.": "Member"인스턴스 여야합니다. " 로그인 목록에 상관없이 누구나 볼 수 있도록 내 게시물 목록을 원합니다. – demyr

+0

확인. 내 콘텐츠를 호출하기 위해 태그를 사용하는 것이 조금 실수 였지만 다른 한편으로는 괄호를 채우는 대신 "MyPosts.objects.filter()"를 사용하여 긍정적 인 결과를 얻었습니다. 그러나 모든 사용자의 모든 게시물을 표시합니다. 프로필 페이지를 방문한 사용자뿐만 아니라 자신이 속한 게시물이 아닌 ... – demyr

+0

로그인 한 사용자 대신 회원의 게시물을 표시하려면 'MyPosts.objects.filter (user = member)'. 'request.user'를 사용하여 객체를 필터링하려면 익명 사용자 오류를 방지하기 위해'login_required' 데코레이터를 사용하는 것이 유용합니다. – Alasdair

관련 문제