别名Python / Django模型查询中的函数参数

时间:2012-03-14 12:18:25

标签: python django django-models

我想知道是否可以使用其字段的别名查询Django模型?

例如:

class Book(models.Model):
    pub_date = models.DateTimeField(_('Publication Date'),
    ...

class Magazine(models.Model):
    creation_date = models.DateTimeField(_('Publication Date'),
    ...

我可以为这个类别名,这很棒:

my_class = Book

然后将其查询为:

my_class.objects.all()

精细!

我希望能够将Book.pub_date& Magazine.creation_date为my_pub_date,所以我可以这样做:

Book.objects.filter(my_pub_date__gt=some_date) (or my_class.objects.filter(my_pub_date__gt=some_date))

而不是:

Book.objects.filter(pub_date__gt=some_date)

由于

1 个答案:

答案 0 :(得分:3)

不是没有经过多少努力。即使有可能,如果你想保持理智,也不要这样做。

在这种情况下,我使用(a)一个抽象基类,它保存两个模型的公共信息。

class Publication(models.Model):
    pub_date = models.DateField(_('publication date'))
    # other fields

    class Meta:
        abstract = True

class Book(Publication):
    # ...

class Magazine(Publication):
    # ...

或(b)具有publication_type字段的单个模型,选择“book”和“magazine”。

或者(c)使用方法published_after向两个模型添加自定义管理器和查询集,该方法知道要用于过滤器的属性。

我建议选择(b)书籍和杂志之间是否存在很大差异,以及(a)是否存在差异。