0

有没有办法可以采用模型,定义等效字段并使用它进行过滤?

示例模型:

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")
4

1 回答 1

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

于 2013-08-28T15:11:08.883 回答