【问题标题】:Can Django models have shortcut properties?Django 模型可以有快捷方式属性吗​​?
【发布时间】:2013-08-31 18:01:33
【问题描述】:

有没有一种方法可以获取模型,定义等效字段并使用它进行过滤?

示例模型:

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

【问题讨论】:

    标签: django django-models


    【解决方案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

    【讨论】:

    • 我想简化模型的接口,这个例子是人为的。真正的模型涉及更长的连接链,我们几乎一直在使用它。这导致我们的大多数视图都包含这个长字符串,而且几乎不可读。我们的问题域建模非常复杂。
    • 编辑了我的答案以反映这一点。
    猜你喜欢
    • 1970-01-01
    • 2020-03-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多