如何从Django中的另一个模型获取模型的计数?

时间:2019-01-24 16:11:12

标签: python django

我需要得到导演执导的“电影”(鹈鹕)的票数。电影和导演是不同的类。多亏了一个stackoverflow用户,我才能够从模板上做到这一点,但是当我们谈论两个模型类时,我认为它可能会有所不同。

我想在Director中创建一个函数,该函数可以告诉我他已经完成了多少部电影,但是我不知道如何从“导演”中调用“ Peliculas”

class Director(models.Model):
    nombre = models.CharField(
        max_length=100
    )
    fecha_nacimiento = models.DateField()
    fecha_defuncion = models.DateField(
        'Fallecido',
        null=True,
        blank=True,
    )
    foto = models.ImageField(
        upload_to='images/directores/',
        default='images/directores/sin_foto.jpg'
    )

    def get_num_peliculas(self):
        n_peliculas = Pelicula.object.all().count #NOT WORKING
        return n_peliculas

class Pelicula(models.Model):
    titulo = models.CharField(
        max_length=100
    )
    url_trailer = models.CharField(
        max_length=100
    )
    fecha = models.DateField()
    notas_posibles = (
        (1, 1),
        (2, 2),
        (3, 3),
        (4, 4),
        (5, 5)
    )
    nota = models.IntegerField(
        default=3,
        choices=notas_posibles
    )
    sinopsis = models.TextField(
        max_length=400,
        default="Sin sinopsis"
    )
    caratula = models.ImageField(
        upload_to='images/peliculas/caratulas',
        default='images/peliculas/caratulas/sin_caratula.jpg'
    )
    imagen_promocional = models.ImageField(
        upload_to='images/peliculas/imagenes_promocionales',
        default='images/peliculas/imagenes_promocionales/sin_imagen.jpg'
    )
    genero = models.ManyToManyField(
        Genero,
        blank=True,
        related_name='genero'
    )
    director = models.ForeignKey(
        Director,
        on_delete=models.SET('Sin Director')
    )
    actores = models.ManyToManyField(
        Actor,
        blank=True
    )

我该怎么做?

1 个答案:

答案 0 :(得分:1)

您可以使用pelicula_set反向查询该关系,例如:

class Director(models.Model):

    # ...

    def get_num_peliculas(self):
        return self.pelicula_set.count()

如果您在related_name=...中为主管指定了一个ForeignKey,那么这就是反向关系的名称。

或者,您可以.filter(..)查询集,基本上就是这种反向关系:

class Director(models.Model):

    # ...

    def get_num_peliculas(self):
        return Pelicula.objects.filter(director=self).count()