0

我有两个模型,分别是 Post 和 Profile。我保留博客数据,这些数据是 Post 中的标题、正文、所有者、slug 等。并保留用户个人资料设置,即个人资料中的口号、电子邮件、网站等

在我的 index.html 页面中,我在同一页面中显示用户个人资料信息和发布列表。所以 ; 我需要将这两个模型相互连接。当有人访问 127.0.0.1/blog/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

我认为您应该更改 Profile 模型并将 OneToOne 关系添加到 User 模型(有关更多信息,请参见此处):

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

在您看来:

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 回答
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 = User.objecets.get(username=username)
profile = user.profile

有关此的更多信息,您可以在此处阅读 django 模型字段文档 ,您还可以看到关于具有 unique=True 的 ForeignKey 和 OneToOneField 之间的区别的酷答案

我希望这有帮助

于 2012-12-20T17:06:20.533 回答