1

ブログプロジェクトがあります。今は正しく動作しています。複数のユーザーが存在します。

今ログインしているユーザーが作成した投稿を一覧表示したい。'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/')

ありがとうございました。

4

1 に答える 1

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

于 2012-08-25T16:38:00.900 に答える