首页 > 解决方案 > 如何在 django Views.py 中过滤与外键模型相关的对象

问题描述

我有这样的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)

网址.py

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

视图.py

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

但是当我从 url 传递 subj 作为 sig 时,我得到了这个错误,

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

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

标签: pythondjango

解决方案


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

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

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

使用下划线查找


推荐阅读