Я пытаюсь создать доступ для конкретного пользователя к моему сайту todolist с помощью Django

У меня возникает ошибка, когда я делаю миграции в командной строке. Пожалуйста, помогите

-models.py

from django.db import models
from django.contrib.auth.models import User

class ToDoList(models.Model):
    user = models.ForeignKey(User, on_delete=models.CASCADE, related_name="todolist", null=True)
    name = models.CharField(max_length=200)

    def __str__(self):
        return self.name


class Item(models.Model):
    todolist = models.ForeignKey(ToDoList, on_delete=models.CASCADE)
    text = models.CharField(max_length=300)
    complete = models.BooleanField()

    def __str__(self):
        return self.text

Когда я попытался сделать миграции в командной строке, я получил эту ошибку cmd-pic

Я использовал эту команду:

python manage.py makemigrations
python manage.py migrate

Я использовал учебник от TechWithTim (ссылка: https://www.youtube.com/watch?v=sm1mokevMWk&t=7589s), чтобы сделать этот проект. Он работает нормально для него, но не для меня.

Кто-то, пожалуйста, скажите мне, где я ошибся.

Request передается представлениям. response - это то, что возвращается из представлений, а не наоборот (хотя запрос можно назвать по-разному, но лучше делать это осмысленно).

ForeignKey создает отношение "один-ко-многим". Модель, в которой объявлено это поле, считается вторичной, а модель, которая объявлена в этом поле, считается первичной. Описание Здесь:

Используя первичную модель (ToDoList), вы можете получить связанные с ней данные из вторичной модели (Item). Для этого в первичной модели по умолчанию создается специальное свойство (объект) с именем secondary model_set. В нашем случае: item_set.

Обратите внимание, что свойство написано в нижнем регистре (свойство создается с маленькой буквы). Вы также можете определить его самостоятельно, используя related_name (в этом случае оно будет таким, каким вы его напишите, без префикса _set).

В представлении я сначала получаю данные из первичной модели на основе вторичной(aaa.todolist то есть, обращаясь к полю вторичной модели, я получаю имя первичной модели, так как первичный класс возвращает имя. А затем я получаю пользователя через имя).

Затем я использую первичную для получения данных вторичной модели (во вторичной модели я взял только первое значение). Все полученные данные отображаются на странице.

def create(request):
    aaa = Item.objects.get(id=1)
    name = aaa.todolist
    user = aaa.todolist.user

    bbb = ToDoList.objects.get(id=1)
    fff = bbb.item_set.all()[0]#takes the first element from the QuerySet .
    print(bbb.item_set.all())


    return HttpResponse(f"""
        <p>ferst name: {name}</p>
        <p>ferst user: {user}</p>
        <p>second todolist: {fff.todolist}</p>
        <p>second text: {fff.text}</p>
        <p>second complete: {fff.complete}</p>
    """)

urls.py

urlpatterns = [ 
    path("create/", create, name="create"),
]
Вернуться на верх