Django模型可以有快捷方式属性吗​​?

时间:2013-08-28 15:08:34

标签: django django-models

有没有办法可以采用模型,定义一个等效的字段并使用它来过滤?

示例模型:

class Manufacturer(models.Model):
    uuid = UUIDField(primary_key=True)
    company = models.ForeignKey(Company, db_column='company_uuid')
    account_number = models.CharField(max_length=255, verbose_name=_('Account No'))
    reference = models.CharField(max_length=255)
    notes = models.TextField()

    class Meta:
        db_table = 'manufacturer'

我可以继续在模型上添加这样的东西:

self.field(name, self.company.name)

然后能够做到:

Manufacturer.objects.filter(name="Davies")

1 个答案:

答案 0 :(得分:1)

对于一个简单的案例,您可以这样做:

Manufacturer.objects.filter(company__name='Davies')

如果您要定义自定义过滤器,看起来最好的方法是在模型上设置自定义管理器,如下所述:https://docs.djangoproject.com/en/dev/topics/db/managers/#custom-managers

我实际上并没有这样做,但如果你为你的模型定义一个经理,你应该能够做到以下其中一个:

  • 覆盖filter方法,然后您应该可以根据需要修改kwargs,以便用漫长丑陋的连接替换别名
  • 定义一个新方法,例如my_filter,应用您想要的过滤

相关的SO问题:Django Custom Queryset filters