[英]How to view (the same) data (of User) in UserProfile in Django
[英]Django : Filtering Post by user + UserProfile data
我希望你很好。 我收到一个错误: name 'username' is not defined
我想要一个包含用户 slug 的公共页面。
前任。 profile/louis/ 路易斯的帖子 + 路易斯的 UserProfileData
我从 Django 开始,所以我犯了一些错误。
nutriscore/models.py
class Post(models.Model):
author = models.ForeignKey(User, on_delete= models.CASCADE,related_name='blog_posts')
用户/模型.py
class UserProfile(models.Model):
user = models.OneToOneField(settings.AUTH_USER_MODEL,on_delete=models.CASCADE)
用户/视图.py
#public profile
@login_required(login_url='/earlycooker/login')
def userpublicpostview(request, slug):
template = 'user_public_profile.html'
user = User.objects.filter(username).values()
user_id = user[0]['id']
userprofile = UserProfile.objects.filter(user_id=userprofile).values()
user_post = Post.objects.filter(author = user_id, slug=slug)
return render(request, template, {'user_posts':user_posts,'userpublic': userpublic})
用户/网址.py
path('profile/<slug:slug>/', userpublicpostview,name="user_public_cookwall"),
使用这些行:
user = User.objects.filter(username=slug).values()
...
userprofile = UserProfile.objects.filter(user_id=user_id).values()
user_post = Post.objects.filter(author = user_id) # removed slug from here
...
return render(request, template, {'user_posts':user_posts,'userpublic': userprofile})
from django.shortcuts import get_object_or_404
@login_required(login_url='/earlycooker/login')
def userpublicpostview(request, slug):
template = 'user_public_profile.html'
user = get_object_or_404(User.objects.prefetch_related('blog_posts'), username=slug)
return render(request, template, {'current_user':user})
# user profile information
{{ current_user.userprofile.bio }}
{{ current_user.userprofile.profile_pic }}
# posts
{% for post in current_user.post_set.all %}
{{ post.title }}
{% endfor %}
你可以在这里看到我可以通过current_user.userprofile
访问 Profile 信息,因为模板中的User
模型和UserProfile
模型之间存在OneToOne关系。 其次,我可以通过反向查询current_user.post_set.all
并遍历帖子来访问给定用户的所有帖子。 更多关于反向关系(相关对象)的信息可以在文档中找到。
您可以简化您的代码:
from django.shortcuts import get_object_or_404
@login_required(login_url='/earlycooker/login')
def userpublicpostview(request, slug):
user = get_object_or_404(User.objects.select_related('userprofile'), username=slug)
posts = Post.objects.filter(author_id=user.id)
return render(request, 'user_public_profile.html', {
'user_posts': posts,
'userpublic': user.userprofile
})
在您的 html 中,以这种方式显示帖子:
{% for post in user_posts %}
<a href=‘{% url ‘user:user_public_cookwall’ post.author.slug %}’>{{ post.title }}</a>
{% endfor %}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.