Django BaseManager.all() получил неожиданный аргумент ключевого слова 'Login'
У меня есть база данных:
class Users(models.Model):
Login = models.OneToOneField(User, on_delete=models.CASCADE) <--- one to one field
email = models.EmailField(max_length=255, unique=True, verbose_name='mail')
balance = models.IntegerField(blank=False, verbose_name='balance')
bonus = models.IntegerField(blank=True, verbose_name='count_bonus')
def __str__(self):
return str(self.Login.username)
class Meta:
verbose_name = 'Users'
verbose_name_plural = 'Users'
ordering = ['id']
и мне нужно запросить базу данных, чтобы получить все значения по request.user, но я получаю ошибку
BaseManager.all() получил неожиданный аргумент ключевого слова 'Login'
def Account(request):
user = Users.objects.all(Login=request.user)
context = {
'title' : 'title',
'user' : user,
}
return render(request=request, template_name='site/account.html', context=context)
Вы пытаетесь применить запрос к методу all(), что Django не позволяет, он просто используется для возврата всех объектов модели.
Что вам нужно, так это применить filter() к набору запросов. Обратите внимание, что применение filter() к объекту модели применяется к объектам all по умолчанию, и вам не нужно явно использовать all().
def Account(request):
user = Users.objects.filter(Login=request.user)
context = {
'title' : 'title',
'user' : user,
}
return render(request=request, template_name='site/account.html', context=context)
Вам следует использовать метод Queryset.filter вместо этого. Queryset.all просто дает вам queryset для извлечения всех записей.
...
user = Users.objects.filter(Login=request.user)
...
Однако, ваша модель Users имеет отношение один-к-одному с User, поэтому вы можете определить related_name, например,
class Users(models.Model):
Login = models.OneToOneField(User, related_name="user_info", on_delete=models.CASCADE)
...
Тогда вы сможете получить доступ к связанному Users объекту таким образом
...
user = request.user.user_info
...