Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 将项上下文包括到Post模型以激活Django中的if语句_Python_Django - Fatal编程技术网

Python 将项上下文包括到Post模型以激活Django中的if语句

Python 将项上下文包括到Post模型以激活Django中的if语句,python,django,Python,Django,我正在尝试向列表视图添加一个项目,UserPost列表视图已经有一个Post上下文 在我的项目中,用户可以添加帖子和项目,每个帖子和项目都是不同型号的应用程序 因此,在我的UserPost列表视图中,我将我的帖子循环到与之相关的特定用户 我试图做的是检查此post.user是否有同一用户筛选的项目,如果该项目确实存在,则会在链接到另一个页面的页面中显示一个按钮,其中包含与此用户相关的项目列表。 为了更具描述性,我想检查designer\u post的Item,并链接到此页面,该页面为{%url'

我正在尝试向列表视图添加一个项目,UserPost列表视图已经有一个Post上下文

在我的项目中,用户可以添加帖子和项目,每个帖子和项目都是不同型号的应用程序

因此,在我的UserPost列表视图中,我将我的帖子循环到与之相关的特定用户


我试图做的是检查此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 %}