简体   繁体   English

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

[英]Django queryset model apply function in field

It is possible simulate this query SQL in Django models using function in field in where clause. 可以使用where子句中的字段中的函数在Django模型中模拟此查询SQL。

My Query SQL 我的查询SQL

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

My Django model. 我的Django模型。

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

Methods in Django - Value of where_filter is a MD5 of value field id / pk . Django中的方法 - where_filter的值是值字段id / pk的MD5。

where_filter = 'e4da3b7fbbce2345d7772b0674a318d5'

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

Thanks. 谢谢。

You can do this with a custom Transform class. 您可以使用自定义Transform类来完成此操作。

Something like: 就像是:

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)

Now you can do: 现在你可以这样做:

where_filter = 'e4da3b7fbbce2345d7772b0674a318d5'

Students.objects.get(pk__md5=where_filter)

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM