Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.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
Django 仅当具有外键的子项具有记录时,才能获取模型的结果_Django_Django Models - Fatal编程技术网

Django 仅当具有外键的子项具有记录时,才能获取模型的结果

Django 仅当具有外键的子项具有记录时,才能获取模型的结果,django,django-models,Django,Django Models,我有以下两种型号: class Tutorial(models.Model): name = models.CharField(max_length=200, unique=True, blank=False, null=False) cover = models.ImageField(upload_to=tutorial_image_path) author = models.ForeignKey(User, on_delete=models.CASCADE)

我有以下两种型号:

class Tutorial(models.Model):
    name = models.CharField(max_length=200, unique=True, blank=False, null=False)
    cover = models.ImageField(upload_to=tutorial_image_path)
    author = models.ForeignKey(User, on_delete=models.CASCADE)
    created_on = models.DateTimeField(auto_now_add=True)
    status = models.IntegerField(choices=STATUS, default=1)

class Video(models.Model):
    name = models.CharField(max_length=200, unique=True, blank=False, null=False)
    tutorial = models.ForeignKey(Tutorial, on_delete=models.DO_NOTHING, blank=False, null=False)
    category = models.ForeignKey(Category, on_delete=models.DO_NOTHING, blank=False, null=False)
    iframe = models.CharField(max_length=500, blank=False, null=False)
    description = models.TextField(blank=True, null=True)
    created_on = models.DateTimeField(auto_now_add=True)
    status = models.IntegerField(choices=STATUS, default=1)

class Meta:
    ordering = ['-created_on']

def __str__(self):
    return self.name
results = Tutorial.objects.filter(id__in=Video.objects.filter....)
我想得到所有的教程,其中至少有一个视频在视频模型

具体如下:

class Tutorial(models.Model):
    name = models.CharField(max_length=200, unique=True, blank=False, null=False)
    cover = models.ImageField(upload_to=tutorial_image_path)
    author = models.ForeignKey(User, on_delete=models.CASCADE)
    created_on = models.DateTimeField(auto_now_add=True)
    status = models.IntegerField(choices=STATUS, default=1)

class Video(models.Model):
    name = models.CharField(max_length=200, unique=True, blank=False, null=False)
    tutorial = models.ForeignKey(Tutorial, on_delete=models.DO_NOTHING, blank=False, null=False)
    category = models.ForeignKey(Category, on_delete=models.DO_NOTHING, blank=False, null=False)
    iframe = models.CharField(max_length=500, blank=False, null=False)
    description = models.TextField(blank=True, null=True)
    created_on = models.DateTimeField(auto_now_add=True)
    status = models.IntegerField(choices=STATUS, default=1)

class Meta:
    ordering = ['-created_on']

def __str__(self):
    return self.name
results = Tutorial.objects.filter(id__in=Video.objects.filter....)
你知道怎么做吗?

你可以利用

结果=Tutorial.objects.filtervideo\uuuu isnull=False.distinct 也许因为我没有测试这个,你也可以做:

结果=Tutorial.objects.select\u relatedvideo.filtervideo\u\u isnull=False.distinct
这给了我一个错误:无法将关键字“video_set”解析到字段中我已经编辑了我的答案。你现在能查一下吗?!很可能您得到了一个字段列表以及一个无法解析关键字的字段列表。。。错误。它应该是video\u isnull:如果没有在fk字段上设置相关的\u名称,那么它将使用模型的小写名称进行查找。另外,您可能希望添加distinct,因为它将复制包含多个视频的教程对象。现在我得到***django.core.exceptions.FieldError:在select_related:“video”中给出的字段名无效。选择是:作者。我在问题中添加了完整的模型。