【问题标题】:How to filter the objects related to foreign key model in django Views.py如何在 django Views.py 中过滤与外键模型相关的对象
【发布时间】:2021-03-18 02:31:36
【问题描述】:

我有这样的models.py:

class Subject(models.Model):
    sub = models.CharField(max_length=200)

    slug = models.SlugField(unique=True)
    created_on = models.DateTimeField(auto_now_add=True)

class Post(models.Model):
    sub = models.ForeignKey(Subject, on_delete=models.CASCADE)
    file_name = models.CharField(max_length=50,blank=True)
    url = models.CharField(max_length=800, unique=True)

urls.py

 path('view/<subj>/', views.PostDetail, name='post_detail'),

views.py

def PostDetail(request, subj):
    content = Post.objects.get(sub=subj)

但是当我从 url 将 subj 作为 sig 传递时出现此错误,

invalid literal for int() with base 10: 'sig'

如何获取与查询主题相关的所有对象,即 Post 模型中的“子”?

【问题讨论】:

    标签: python django


    【解决方案1】:

    如果您期望多个对象(查询集),请使用filter()

    def PostDetail(request, subj):
        content = Post.objects.filter(sub__sub=subj)
    

    以 10 为底的 int() 的无效文字:'sig':因为在您的 get() 方法中,sub 期待某种 id(整数)。但是,你已经通过了string。因此,通过转到 Subject 模型中的特定字段并使用 underscore(__) 指向 sub,您应该会得到您所期望的。

    Lookups using underscore.

    【讨论】:

      【解决方案2】:

      在你的urls.py 中给出 subj 类型,如果 subj 是 String 添加 &lt;str:***&gt;:

      path('view/<str:subj>/', views.PostDetail, name='post_detail'),
      

      views.py:

      def PostDetail(request, subj):
          content = Post.objects.filter(sub__sub=subj)
      

      使用过滤器搜索Post.sub,因为sub是ForeignKey,所以使用sub__sub。

      【讨论】:

        猜你喜欢
        • 2018-10-05
        • 1970-01-01
        • 2017-07-27
        • 2021-11-17
        • 1970-01-01
        • 2013-09-23
        • 2018-02-03
        • 1970-01-01
        • 2018-04-27
        相关资源
        最近更新 更多