Получать результаты модели, только если у ребенка с внешним ключом есть записи - PullRequest
0 голосов
/ 01 октября 2019

У меня есть две модели следующим образом:

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

Я хочу получить все Tutorials, где есть хотя бы одно видео в Video модели

Что-то следующее:

results = Tutorial.objects.filter(id__in=Video.objects.filter....)

Есть идеи, как это сделать?

1 Ответ

1 голос
/ 01 октября 2019

Вы можете использовать isnull

results = Tutorial.objects.filter(video__isnull=False).distinct()

Возможно (потому что я не проверял это) вы также можете сделать:

results = Tutorial.objects.select_related("video").filter(video__isnull=False).distinct()
...