0

Post と Profile の 2 つのモデルがあります。タイトル、本文、所有者、スラッグなどのブログデータをポストに保管しています。スローガン、電子メール、ウェブサイトなどのユーザープロファイル設定をプロファイルに保持します

私のindex.htmlページでは、ユーザープロファイル情報と投稿リストを同じページに表示しています。それで ; これら2つのモデルを互いに接続する必要があります。誰かが 127.0.0.1/blog/username (ログインの有無にかかわらず) にアクセスすると、「username」という名前のユーザーに属するすべてのデータがそこにある必要があります。

ここに私のmodels.pyがあります:

class Profile(models.Model):
    slogan = models.TextField(blank=True)
    twitter = models.CharField(max_length = 100,blank=True)
    web_site = models.CharField(max_length=100,blank=True)
    email = models.CharField(max_length = 100,blank=True)

    def __unicode__(self):
        return self.slogan


class Post(models.Model):
    owner = models.ForeignKey(User)
    title = models.CharField(max_length = 100)
    body = models.TextField()
    bodyPreview = models.TextField() #preview için body alanı
    titlePreview = models.CharField(max_length=100) # preview için title alanı
    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})

と私のインデックスビュー:

def index(request,username):
    post_list = Post.objects.filter(owner__username=username).filter(isdraft=False).order_by("-posted")
    p_index = Paginator(post_list,3) #anasayfa için pagination.[her sayfada 3 post]
    page = request.GET.get('page')

    try:
        indexPag = p_index.page(page)
    except PageNotAnInteger:
        indexPag = p_index.page(1)
    except EmptyPage:
        indexPag = p_index.page(p_index.num_pages)

    ## i need to get user's profile datas here. ??

    return render_to_response('index.html',
                             {'post_list':post_list,'p_index':indexPag,'profile':query},
                             context_instance = RequestContext(request))
4

3 に答える 3

1

プロファイルモデルを変更し、OneToOne関係をユーザーモデルに追加する必要があると思います(詳細については、こちらを参照してください)。

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

class Posts(models.Model):
    author = models.ForeignKey(User)
    ...

そして、あなたの見解では、次のことができます。

user = get_object_or_404(User, username=username)
post_list = Post.objects.filter(author=user).filter(isdraft=False).order_by("-posted") 

return render_to_response('index.html', 
                           {'post_list': post_list, 'user': user, ...}, ...)

そして、テンプレートでユーザーのプロファイルにアクセスでき ます{{user.get_profile.slogan}}

于 2012-09-20T11:30:02.173 に答える
0

これを実現する最も自然な方法は、 Profileモデルと django のUserモデルの間に OneToOne 関係を追加することです。

from django.contrib.auth.models import User

class Profile(models.Model):
    user = models.OneToOneField(User)
    # More fields

class Article(models.Model):
    author = models.ForeignKey(User)
    # More fields

このようにして、ユーザー オブジェクトを介してプロファイル データにアクセスできます。次のようになります。

user = User.objecets.get(username=username)
profile = user.profile

詳細については、ここで django モデル フィールドのドキュメントを参照してください。また、unique=True の ForeignKey と OneToOneField の違いに関するこのクールな回答 も参照できます。

これが役立つことを願っています

于 2012-12-20T17:06:20.533 に答える
0

あなたの見解では:

def index(request, username):
    user = User.objects.get(username=username)
    return render(request, 'index.html', {'user':user})

あなたのテンプレートで:

{{ user.post_set }}

現在のユーザーの投稿のリストを受け取ります。

于 2012-09-20T11:26:09.100 に答える