2012-08-25 61 views
1

有一個博客項目。它現在工作正常。會有多個用戶。Django - 登錄用戶的帖子列表

我想列出由現在登錄的用戶創建的帖子。如果'x'用戶登錄,他必須在管理頁面上看到他自己的帖子。

這是什麼正確的方法?

這裏是我的models.py:

class Post(models.Model): 
    title = models.CharField(max_length = 100) 
    body = models.TextField() 
    slug = AutoSlugField(populate_from='title',unique=True) 
    posted = models.DateField(auto_now_add=True) 
    isdraft = models.BooleanField(default=False) 

    def __unicode__(self): 
     return self.title() 

    @permalink 
    def get_absolute_url(self): 
     return ('view_blog_post',None, {'postslug':self.slug}) 


class UserProfile(models.Model): 
    user = models.OneToOneField(User) 

def create_user(sender,instance,created,**kwargs): 
    if created: 
     UserProfile.objects.create(user=instance) 

post_save.connect(create_user, sender=User) 

和我的views.py(只是管理頁面的一部分):

@login_required(login_url='/panel/') 
def adminView(request): 
    if request.session['loggedin']=="djangoo": 

     draft_list = Post.objects.filter(isdraft=True).order_by("-posted") 
     p_draft = Paginator(draft_list,15) 

     publish_list = Post.objects.filter(isdraft=False).order_by("-posted") 
     p_publish = Paginator(publish_list,15) 

     page = request.GET.get('page') 

     try: 
      post_d = p_draft.page(page) 
      post_p = p_publish.page(page) 
     except PageNotAnInteger: 
      post_d = p_draft.page(1) 
      post_p = p_publish.page(1) 
     except EmptyPage: 
      post_d = p_draft.page(p_draft.num_pages) 
      post_p = p_publish.page(p_publish.num_pages) 


     return render_to_response('admin.html', 
            {'draft_list':draft_list,'publish_list':publish_list,'post_d':post_d,'post_p':post_p}, 
           context_instance=RequestContext(request)) 
    else: 
     HttpResponseRedirect('/panel/') 

謝謝。

回答

2

您必須存儲發佈在您的發佈模型中的用戶,然後您可以輕鬆過濾出這些用戶。

我將更新像模型:

class Post(models.Model): 
    owner = models.ForeignKey('User') 
    # your other fields 

和管理視圖:

@login_required(login_url='/panel/') 
def adminView(request): 
    draft_list = Post.objects.filter(owner=request.user).filter(isdraft=True).order_by("-posted") 
    #------------------------------^^^^ filter based on owner 
    p_draft = Paginator(draft_list,15) 

    publish_list = Post.objects.filter(owner=request.user).filter(isdraft=False).order_by("-posted") 
    p_publish = Paginator(publish_list,15) 
    #your other view code 
    ... 

此外,你將有更新增加了一個後把owner以及視圖。

+0

你真棒:) – alix

+0

@drTerminal,你重新激活數據庫嗎?請注意,您必須重置數據庫,因爲「syncdb」不會添加新列。此外,你是否在添加帖子時設置了「所有者」屬性? – Rohan

+0

我修好了。這是關於數據庫錯誤。我重新創建數據庫,現在它工作正常:) – alix