"AttributeError: у объекта 'NoneType' нет атрибута 'startswith' в Django Djongo".
Я сталкиваюсь с ошибкой AttributeError в моем Django при использовании Djongo в качестве бэкенда базы данных. Сообщение об ошибке выглядит следующим образом:
AttributeError at /loginPage
'NoneType' object has no attribute 'startswith'
Эта ошибка возникает в методе quote_name в operations.py. Вот соответствующий фрагмент кода:
class DatabaseOperations(BaseDatabaseOperations):
def quote_name(self, name):
if name.startswith('"') and name.endswith('"'):
return name
return '"{}"'.format(name)
Я понимаю, что эта ошибка обычно возникает, когда метод вызывается на объекте NoneType, но я не знаю, почему это происходит в данном контексте.
Может ли кто-нибудь подсказать, почему может возникнуть эта ошибка и как ее решить? Я использую Django с Djongo в качестве бэкенда базы данных.
Далее я пытаюсь реализовать функциональность, при которой данные формы попадают в две разные коллекции в моей базе данных MongoDB, и все работает нормально. Я попытался соответствующим образом изменить код, но сталкиваюсь с этой ошибкой при входе в систему. Ниже приведен фрагмент кода, в котором возникает ошибка:
#forms.py
class UserAdminCreationForm(UserCreationForm):
company_name = forms.CharField(max_length=100)
ROLE_CHOICES = [
('admin', 'Admin'),
('user', 'User'),
]
role = forms.ChoiceField(choices=ROLE_CHOICES, label='Role')
email = forms.EmailField(required=True)
class Meta:
model = get_user_model()
fields = ['company_name','role','first_name', 'last_name','email', 'password1', 'password2',]
def save(self, commit=True):
user = super().save(commit=False) # Get the user object without saving to the database yet
user.company_name = self.cleaned_data['company_name']
if commit:
user.save()
slug = slugify(user.company_name)
role = self.cleaned_data.get('role')
collection_name = f"loginapp_{slug}_{role}"
# Change the database table name for the CustomUser model
CustomUser._meta.db_table = collection_name
# Save the user to the new collection
user.save()
# Reset the database table name to the original one
CustomUser._meta.db_table = None
return user
Я заметил, что ошибка возникает периодически и устраняется, когда я перезапускаю сервер Django. Любые соображения о том, почему это может происходить, были бы очень признательны. Спасибо!
Полное возвращение к трассировке:
#views.py
def loginPage(request):
form = LoginForm()
if request.method == 'POST':
form = LoginForm(request.POST, data=request.POST)
if form.is_valid():
email = request.POST.get('email')
password = form.cleaned_data['password']
# Authenticate user using email instead of username
user = authenticate(request, email= email , password=password)
if user is not None:
auth.login(request, user)
return redirect("dashboard")
else:
form.add_error(None, "Invalid email or password")
context = {'loginform': form}
return render(request, 'loginapp/loginPage.html', context=context)