Django queryset模型在字段中应用函数

时间:2015-05-11 13:37:58

标签: python django django-models

可以使用where子句中的字段函数在Django模型中模拟此查询SQL。

我的查询SQL

SELECT id, name, email
  FROM students where md5(cast(id as text)) = 'e4da3b7fbbce2345d7772b0674a318d5';

我的Django模型。

class Students(models.Model):
    name = models.CharField(max_length=50)
    email = models

Django中的方法 - where_filter的值是值字段id / pk的MD5。

where_filter = 'e4da3b7fbbce2345d7772b0674a318d5'

Students.objects.get(pk=where_filter)
Students.objects.filter(pk=where_filter)

感谢。

1 个答案:

答案 0 :(得分:3)

您可以使用自定义Transform课程执行此操作。

类似的东西:

launchctl setenv JAVA_HOME /Library/Java/JavaVirtualMachines/jdk1.7.0_45.jdk/Contents/Home

现在你可以做到:

class Md5Value(Transform):
    lookup_name = 'md5'
    output_field = CharField()

    def as_sql(self, compiler, connectino):
        lhs, params = compiler.compile(self.lhs)
        return "MD5(cast(%s as text))"  % lhs, params

AutoField.register_lookup(MD5Value)