Django Поле 'id' ожидало число, но получило <built-in function id>

Я изучаю этот учебник о django todoapp. Я хочу отобразить содержимое всех пользователей (их тодолисты) и получаю эту ошибку см. заголовок Я использую аутентификацию входа google

вот мой views.py

def todoView(request,):
  all_todo_items = Todoitem.objects.filter(userid=id).values_list('id', flat=True)
  return render(request, 'todoapp.html', {'all_items': all_todo_items})

вот мой models.py

class Todoitem(models.Model):
content = models.CharField(max_length=100)
userid = models.ForeignKey(AuthUser, models.DO_NOTHING, db_column='userid', blank=True, 
null=True)

class Meta:
    managed = False
    db_table = 'todoitem'

def __str__(self):
    return self.content

class AuthUser(models.Model):
password = models.CharField(max_length=128)
username = models.CharField(unique=True, max_length=150)
first_name = models.CharField(max_length=150)
last_name = models.CharField(max_length=150)
email = models.CharField(max_length=254)

class Meta:
    managed = False
    db_table = 'auth_user'

вот мой todoapp.html

{% load socialaccount %}
<body>
{% if user.is_authenticated %}
<p>Welcome, {{ user.username }} !</p>

{% else %}
<h1>My Google Login Project</h1>
<a href="{% provider_login_url 'google' %}">Login with Google</a>
{% endif %}
<h2>My Personal TodoApp Project</h2>
<br>
<table>
<tr>
    <th colspan="2">List of Todos</th>
</tr>
{% for todo_items in all_items %}
<tr>
    <td>{{todo_items.content}}</td>
</tr>
{% endfor %}
</table>
</body>

Я ожидаю, что id приходит из пути. Поэтому добавьте параметр id в свою функцию:

def todoView(request, id=None):
  all_todo_items = Todoitem.objects.filter(userid=id).values_list('id', flat=True)
  return render(request, 'todoapp.html', {'all_items': all_todo_items})

Вы передаете Todoitems вошедшего пользователя с:

from django.contrib.auth.decorators import login_required

@login_required
def todoView(request):
    all_todo_items = Todoitem.objects.filter(userid=request.user)
    return render(request, 'todoapp.html', {'all_items': all_todo_items})

Примечание: Обычно лучше использовать settings.AUTH_USER_MODEL [Django-doc] для ссылки на модель пользователя, чем использовать User модель [Django-doc] напрямую. Для получения дополнительной информации вы можете посмотреть ссылка на User модель раздел документации .


Примечание: Вы можете ограничить представления для аутентифицированных пользователей с помощью декоратора @login_required декоратора [Django-doc].

Вернуться на верх