如何在django中通过某个字段的值过滤对象?

fivyi3re  于 2022-12-20  发布在  Go
关注(0)|答案(1)|浏览(118)

我在www.example.com上有django应用程序urls.py:

path('<str:slug>/', views.article),

当用户在我的网站中键入产品名称时,视图被触发:

def article(request, slug):
    videos = models.Video.objects.filter(article=slug)
    return render(request, 'videos/at_detail.html', {'videos': videos})

如果我在函数的某个地方添加print(slug),它会返回我在url中输入的单词,所以这部分可以工作。

  • 型号:*
class article(models.Model):
    name = models.CharField(max_length=30, null=True)
    slug = AutoSlugField(populate_from='name', unique=True, default=None)
    created_on = models.DateTimeField(default=timezone.now)
    owner = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE, blank=True, default=None)
    
    def __str__(self):
        return self.name
    

    class Meta:
        verbose_name = "Articles"

class Video(models.Model):
    video_id = models.UUIDField(
        primary_key=True,
        default=uuid.uuid4,
        editable=False
    )
    title = models.CharField(max_length=50)
    description = models.CharField(max_length=500)
    file = models.FileField()
    article = models.ForeignKey(at, on_delete=models.CASCADE)

    def __str__(self):
        return str(self.title) + " - " + str(self.at)

    class Meta:
        verbose_name_plural = "Videos"
        verbose_name = "Video"

什么不工作,我正在尝试做的是,得到所有的对象,具有相同的值'article',这是我在我的网址输入.所以,例如:如果我输入127.0.0.1:8000/blueberry/,我将得到字段为article=blueberry的所有对象。
这可能吗?如果可能,我怎么做?

编辑#1

我把videos = models.Video.objects.filter(article=slug)写成了@AnkitTiwari注解的videos = models.Video.objects.filter(at__slug=slug),这样就消除了错误,但是如果我写print(videos),我得到的查询集是空的:<QuerySet []>。我有视频在我的数据库虽然。如果我做videos = models.Video.object.all()print(videos.title)我得到一个视频在我的数据库标题。如果我做这件事与2个视频我得到一个错误,这说明我不能显示标题的2个元素。但我得到查询集与信息的2个视频。

那么,尽管我的数据库中有视频,但为什么我的查询集为空?

biswetbf

biswetbf1#

你试过Video.objects.filter(article__slug__iexact=slug)吗?

相关问题