Django user_id из django db отсутствует в приложении models.py
Несколько дней назад я начал этот учебник по Django: https://www.youtube.com/watch?v=sm1mokevMWk
В этом видео рассказывается о том, как создать свой первый django-проект, используя некоторые библиотеки из django, а также bootstrap для создания стиля вашего сайта. Он рассказывает о том, как настроить базу данных, веб-сайт и все остальное, что вам нужно для примера сайта со списком дел, а в конце видео он рассказывает о настройке пользователей, а также списков дел для конкретного пользователя. Я попробовал воссоздать этот процесс, и до момента создания списков дел для конкретного пользователя все было очень понятно и легко выполнимо. Однако, когда я попытался реализовать практически последний шаг, я получил следующую ошибку:
Операционная ошибка в /create/
В таблице main_todolist нет столбца с именем user_id
Метод запроса: POST
URL запроса: http://127.0.0.1:8000/create/.
Версия Django: 5.0.1
Тип исключения: OperationalError
Значение исключения:
В таблице main_todolist нет столбца с именем user_id
Местоположение исключения: C:\Entwicklung\Python\Python312\Lib\site-packages\django\db\backends\sqlite3\base.py, строка 328, in execute
Вызвано во время выполнения: main.views.create
Исполняемый файл Python: C:\Entwicklung\Python\Python312\python.exe
Версия Python: 3.12.0
Python Path:
['C:\Users\brenneckeo\Desktop\Django Projekt\meineSeite',
'C:\Entwicklung\Python\Python312\python312.zip',
'C:\Entwicklung\Python\Python312\DLLs',
'C:\Entwicklung\Python\Python312\Lib',
'C:\Entwicklung\Python\Python312',
'C:\Entwicklung\Python\Python312\Lib\site-packages'].
Время сервера: Wed, 28 Feb 2024 14:18:52 +0000
При попытке создать ToDoList появляется ошибка. Когда вы это делаете, вы попадаете на страницу "/view", где перечисляются элементы (это модель базы данных, относящаяся к модели "ToDoList") созданного вами списка TodoList, и вы можете добавлять новые и проверять любой из элементов. Так и должно работать, но из кода ошибки я понял, что в списке не было атрибута "user_id", который должен ссылаться на пользователя, чтобы вы могли просматривать различные списки дел, которые вы создали. В коде файла "models.py", который я создал, парень из видео использовал следующие пакеты:
from django.db import models
from django.contrib.auth.models import User
Затем в файле "models.py" мои базы данных создаются следующим образом:
class ToDoList(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE, related_name="user", 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=200)
complete = models.BooleanField()
def __str__(self):
return self.text
Итак, судя по коду ошибки, я предполагаю, что мне нужно добавить атрибут user_id в качестве внешнего ключа, указывающего на пользователей или что-то еще? Парень в видео не получил это сообщение об ошибке. Я предполагаю, что это потому, что это было 3 года назад или что-то в этом роде, но я не знаю точно.
Я подумал, что раз он ищет какой-то атрибут "user_id", то я должен добавить его в модели, но это не привело к успеху. Это:
from django.db import models
from django.contrib.auth.models import User
# Models
class ToDoList(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE, related_name="user", null=True)
name = models.CharField(max_length=200)
user_id = models.BigAutoField(on_delete=models.CASCADE, primary_key=True)
def __str__(self):
return self.name
class Item(models.Model):
todolist = models.ForeignKey(ToDoList, on_delete=models.CASCADE)
text = models.CharField(max_length=200)
complete = models.BooleanField()
def __str__(self):
return self.text
... при попытке создать тодолист я получил такой код ошибки:
TypeError: Field.init() получил неожиданный аргумент ключевого слова 'on_delete'
Ок, мне помог коллега, и решение заключалось в том, чтобы просто удалить базу данных sqlite3 и заново запустить миграции, чтобы установить все заново. Спасибо за помощь, но моя проблема решена.