Python 将项上下文包括到Post模型以激活Django中的if语句
我正在尝试向列表视图添加一个项目,UserPost列表视图已经有一个Post上下文 在我的项目中,用户可以添加帖子和项目,每个帖子和项目都是不同型号的应用程序 因此,在我的UserPost列表视图中,我将我的帖子循环到与之相关的特定用户Python 将项上下文包括到Post模型以激活Django中的if语句,python,django,Python,Django,我正在尝试向列表视图添加一个项目,UserPost列表视图已经有一个Post上下文 在我的项目中,用户可以添加帖子和项目,每个帖子和项目都是不同型号的应用程序 因此,在我的UserPost列表视图中,我将我的帖子循环到与之相关的特定用户 我试图做的是检查此post.user是否有同一用户筛选的项目,如果该项目确实存在,则会在链接到另一个页面的页面中显示一个按钮,其中包含与此用户相关的项目列表。 为了更具描述性,我想检查designer\u post的Item,并链接到此页面,该页面为{%url'
我试图做的是检查此post.user是否有同一用户筛选的项目,如果该项目确实存在,则会在链接到另一个页面的页面中显示一个按钮,其中包含与此用户相关的项目列表。 为了更具描述性,我想检查
designer\u post
的Item
,并链接到此页面,该页面为{%url'核心:designer posts'Item.designer%}
我希望这澄清了我的问题,如果有任何需要澄清或代码,请让我知道添加它
我试图使用Exists子查询[Django doc],但没有成功
这是模型
class Post(models.Model):
designer = models.ForeignKey(User, on_delete=models.CASCADE)
title = models.CharField(max_length=100)
class Item(models.Model):
designer = models.ForeignKey(
User, on_delete=models.CASCADE)
title = models.CharField(max_length=100)
这是views.py
class UserPostListView(ListView):
model = Post
template_name = "user_posts.html"
context_object_name = 'posts'
queryset = Post.objects.filter(admin_approved=True)
paginate_by = 6
def get_queryset(self):
user = get_object_or_404(User, username=self.kwargs.get('username'))
return Post.objects.filter(designer=user, admin_approved=True).order_by('-date_posted')
以下是模板用户_posts.html
{% if item %}
<a class="primary btn-lg" href="{% url 'core:designer-posts' item.designer %}" role="button">Go to items</a>
{% else %}
<a href="{% url 'core:designer-posts' item.designer %}">
<button type="button" class="btn btn-primary btn-lg btn-block">Go to items</button>
</a>
{% endif %}
这是designerlist views.py,如果它可用,我将尝试从用户post视图链接到它
class DesignerPostListView(ListView):
model = Item
template_name = "designer_posts.html"
context_object_name = 'items'
paginate_by = 6
def get_queryset(self):
user = get_object_or_404(User, username=self.kwargs.get('username'))
return Item.objects.filter(designer=user).order_by('-timestamp')
以下是与post模型相关的视图
app_name = 'score'
urlpatterns = [
path('', PostListView.as_view(), name='score'),
path('user/<str:username>', UserPostListView.as_view(), name='user-posts'),
]
在{%url%}item.designer中传递一个用户对象,您必须像这样提供id
<a href="{% url 'core:designer-posts' item.designer.id %}">
首先,您需要通过覆盖
获取上下文数据(…)
方法来传递一个上下文变量,该方法决定用户是否有项
class UserPostListView(ListView):
# rest of your code
def get_context_data(self, *args, **kwargs):
context = super().get_context_data(*args, **kwargs)
has_items = Item.objects.filter(designer__username=self.kwargs['username']).exists()
context['has_items'] = has_items
return context
另外,您没有将用户名
传递给url
标记,应该是这样的
{% url 'core:designer-posts' username=view.kwargs.username %}
在这里,我使用view.kwargs.username
从URL获取用户名
工具书类
“如果此post.user有一个由同一用户筛选的项目,并且如果该项目确实存在,则会在链接到另一个页面的页面中显示一个按钮,其中包含与此用户相关的项目列表。”我得到的结果是,您想添加一个按钮,但是你能更清楚地解释一下前提条件吗?@crimsonpython24我添加了一个更具描述性的图片,我希望它是一个与某个项目相关的帖子?你能与数据库中的假设数据共享一个模型吗?@aaron该项目和post是两个不同应用程序中的两个不同模型。例如,用户可以只上传一篇文章(将其视为文章),或者他可能只拥有一个项目(将其视为产品),或者他可以在其名称下同时拥有和项目以及一篇文章。对于每个用户,我创建了两个列表视图,一个用于项目,一个用于帖子,我希望通过按钮将每个视图链接在一起,以便在这两个页面之间进行更轻松的导航。这有意义吗?您还可以添加根URL配置吗?因为您的两个“相关视图”似乎指向与所示相同的URLI,但它返回了NoReverse Match
顺便说一句,我不想循环项目,我只想链接到它
如果{%if post.designer.item.exists%}
@希望这能解决您的问题添加新的答案
class UserPostListView(ListView):
# rest of your code
def get_context_data(self, *args, **kwargs):
context = super().get_context_data(*args, **kwargs)
has_items = Item.objects.filter(designer__username=self.kwargs['username']).exists()
context['has_items'] = has_items
return context
{% if has_items %}
<a class="primary btn-lg" href="{% url 'core:designer-posts' username=view.kwargs.username %}" role="button">Go to items</a>
{% endif %}
{% url 'core:designer-posts' username=view.kwargs.username %}