簡體   English   中英

轉換區分大小寫

[英]Convert case sensitives

我想將任何新輸入的用戶名轉換為小寫並檢查用戶是否存在或現在並使用 iexact 登錄大寫或小寫應該確定登錄使用小寫或大寫

forms.py

class AddCompanyForm(forms.ModelForm):
    """
    Add company model form
    """
    name = forms.CharField(required=True)
    password = forms.CharField(widget=forms.PasswordInput())
    logo = forms.ImageField(required=False)
    phone_number = forms.CharField(widget=forms.NumberInput())
    label = forms.CharField(max_length=20)
    country = forms.ModelChoiceField(queryset=Country.objects.all())
    city = forms.ModelChoiceField(queryset=City.objects.all())
    area = forms.ModelChoiceField(queryset=Area.objects.all())
    latitude = forms.CharField(max_length=50, required=False)
    longitude = forms.CharField(max_length=50, required=False)
    water_source = forms.ModelChoiceField(queryset=WaterSource.objects.all())

    class Meta:
        model = User
        fields = ['name', 'username', 'email', 'password']

    def __init__(self, *args, **kwargs):
        super(AddCompanyForm, self).__init__(*args, **kwargs)
        self.helper = FormHelper()
        self.helper.form_tag = False
        self.layout = Layout(Row(Column('name', css_class='form-group col-md-6 mb-0'),
                                 Column('username', css_class='form-group col-md-6 mb-0'), css_class='form-row'),
                             Row(Column('email', css_class='form-group col-md-6 mb-0'),
                                 Column('password', css_class='form-group col-md-6 mb-0'), css_class='form-row'),
                             Row(Column('phone_number', css_class='form-group col-md-6 mb-0'),
                                 Column('logo', css_class='form-group col-md-6 mb-0'), css_class='form-row'),
                             Row(Column('label', css_class='form-group col'), css_class='form-row'),
                             Row(Column('country', css_class='form-group col'),
                                 Column('city', css_class='form-group col'), Column('area', css_class='form-group col'),
                                 css_class='form-row'), Row(Column('latitude', css_class='form-group col'),
                                                            Column('longitude', css_class='form-group col'),
                                                            css_class='form-row'),
                             Row(Column('water_source', css_class='form-group col'), css_class='form-row'))
        self.helper.layout = self.layout

視圖.py

class Companies(LoginRequiredMixin, UserPassesTestMixin, FormView, ListView):
    """
    Company add edit delete view search paginator
    """
    model = Company
    template_name = 'company/index.html'
    form_class = AddCompanyForm
    success_url = reverse_lazy('companies:index')
    object_list = Company.objects.all()

def form_valid(self, form):
    user, created = User.objects.get_or_create(username=form.cleaned_data['username'],
                                               email=form.cleaned_data['email'])
    user.set_password(form.cleaned_data['password'])
    user.save()
    if created:
        address = Address(label=form.cleaned_data['label'], city=form.cleaned_data['city'],
                          area=form.cleaned_data['area'], long=form.cleaned_data['longitude'],
                          lat=form.cleaned_data['latitude'], country=form.cleaned_data['country'])
        address.save()

        company = Company(owner=user, name=form.cleaned_data['name'],
                          phone_number=form.cleaned_data['phone_number'], logo=form.cleaned_data['logo'],
                          address=address, water_source=form.cleaned_data['water_source'])
        company.save()
    return super().form_valid(form)

我嘗試將此 function 轉換為小寫形式

def clean_username(self): 
 return self.cleaned_data['username'].lower()

我如何在登錄時以及在哪里使用 iexact

你可以像這樣匹配小寫的用戶名

from django.db.models.functions import Lower

input_name = form.cleaned_data['username'].lower()

User.objects.annotate(username_lower=Lower("username")).filter(username_lower=input_name)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM