Django:如何过滤默认用户名为\uyu iexact的用户?

2024-10-01 17:28:44 发布

您现在位置:Python中文网/ 问答频道 /正文

实现用户名不区分大小写:

我想在查询user时隐式暗示iexact

user = User.objects.get(username = 'yugal')  # Lowercase
user.id # 1

user = User.objects.get(username = 'YUgal')  # Mixcase
user.id # 1

我怎样才能做到这一点?{不知怎么的,UserManager}

注意:

  • 而且,django.shortcuts.get_object_or_404似乎将其用作User.objects.get_query_set().all().get()。我们怎样才能让它工作?在

Tags: djangoidgetobjectsusername用户名区分user
2条回答

我想我找到了一种方法来实现所有的db查询:

###### QuerySet #######
def _filter_or_exclude(self, negate, *args, **kwargs):
    if 'username' in kwargs:
        kwargs['username__iexact'] = kwargs['username']
        del kwargs['username']
    if args or kwargs:
        assert self.query.can_filter(),\
        "Cannot filter a query once a slice has been taken."
    from django.db.models import Q
    clone = self._clone()
    if negate:
        clone.query.add_q(~Q(*args, **kwargs))
    else:
        clone.query.add_q(Q(*args, **kwargs))
    return clone

from django.db.models.query import QuerySet
QuerySet._filter_or_exclude = _filter_or_exclude
######################

这就解决了问题。在

明确的:

user = User.objects.get(username__iexact='yugal')

隐式:重写User模型允许您重写objects属性,其中添加自定义iexact处理:

^{pr2}$

相关问题 更多 >

    热门问题