【问题标题】:How can I get a count of a model from another model in Django? [duplicate]如何从 Django 中的另一个模型中获取模型的计数? [复制]
【发布时间】:2019-01-24 16:11:11
【问题描述】:

我需要计算导演执导的“电影”(Peliculas)的数量。电影和导演是不同的类别。多亏了一位 stackoverflow 用户,我才能从模板中做到这一点,但我认为当我们谈论两个模型类时可能会有所不同。

我想在 Director 中创建一个函数,告诉我他做了多少部电影,但我不知道如何从“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
    )

我怎样才能做到这一点?

【问题讨论】:

  • 在您的 sn-p 中包含不相关的代码无助于回答问题。你只关心外键。
  • 另外,我看到你今天两次问了同样的问题。你不应该这样做。如果您希望回答您问题的人为您解决问题,您应该发表评论。如果您对答案不满意,请不要接受。但是你不应该做的是创建重复的问题。 SO 中的审核过程会阻止和惩罚此类行为。
  • 您的问题的答案不仅有据可查,而且与您上一个问题的答案完全相同:您只需要使用反向关系即可。
  • 感谢您的第一个建议。下次会小心点。
  • 关于第二个,我可以告诉你,它是相同的解决方案,但不是同一个问题。也许对于了解 django 的人来说很容易,但对于刚开始的人来说并不容易。

标签: python django


【解决方案1】:

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

class Director(models.Model):

    # ...

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

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

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

class Director(models.Model):

    # ...

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-11-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多