OperationalError at /profile/ no such table: users_profile even after I made migrations
У меня такая проблема. Когда я пытаюсь открыть страницу профиля, чтобы увидеть фото пользователя, но не могу, когда я удаляю строку с user.register.photo, она работает. Я создал модель, где есть поле, которое позволяет пользователям загружать фото, но когда я пытаюсь открыть "profile/", он показывает эту ошибку. Похоже, что проблема в миграциях. Я пытался удалить папку migration, базу sqlite3 и снова сделать migrations, но после использования makemigrations он показал, что "нет изменений". Мне это не помогло, как я могу решить эту проблему?
users/models.py
from django.db import models
from django.contrib.auth.models import User
class Profile(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
image = models.ImageField(default='default.jpg', upload_to='profile_pics')
def __str__(self):
return f'{self.user.username} Profile'
users/views.py
from django.shortcuts import render, redirect
from django.contrib import messages
from .forms import UserRegisterForm
from django.contrib.auth.decorators import login_required
def register(request):
if request.method == 'POST':
form = UserRegisterForm(request.POST)
if form.is_valid():
form.save()
username = form.cleaned_data.get('username')
messages.success(request, f'Создан аккаунт {username}!')
return redirect('login')
else:
form = UserRegisterForm()
return render(request, 'users/register.html', {'form': form})
@login_required
def profile(request):
return render(request, 'users/profile.html')
users/forms.py
from django import forms
from django.contrib.auth.models import User
from django.contrib.auth.forms import UserCreationForm
class UserRegisterForm(UserCreationForm):
email = forms.EmailField()
class Meta:
model = User
fields = ['username', 'email', 'password1', 'password2']
users/templates/users/profile.html
{% extends "main/base.html" %}
{% load crispy_forms_tags %}
{% block content %}
<div class="container">
<div class="content-section">
<div class="media">
<img class="rounded-circle account-img" src="{{ user.profile_image.url }}">
<div class="media-body">
<h2 class="account-heading">{{ user.username }}</h2>
<p class="text-secondary">{{ user.email }}</p>
</div>
</div>
<!-- Здесь будет форма -->
</div>
</div>
{% endblock content %}
users/migrations/0001_initial.py
from django.conf import settings
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
initial = True
dependencies = [
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
]
operations = [
migrations.CreateModel(
name='Profile',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('image', models.ImageField(default='default.jpg', upload_to='profile_pics')),
('user', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)),
],
),
]
Если вы столкнулись с проблемой миграции, удаление папок миграции не является хорошим подходом, потому что если у вас были файлы миграции в папке миграции и вы уже выполнили команду python manage.py migrate
, схема, определенная в файлах миграции, была отправлена в базу данных. также, имена этих файлов миграции внесены в таблицу django_migrations в базе данных,
Представьте, что у нас есть папка migration в simple_app с этими файлами миграции и проблема связана с последним файлом миграции:
first_migration.py
second_migration.py
third_migration.py
Итак, что мы должны сделать, если хотим удалить последний файл миграции:
Нужно отменить применение этой миграции из DB, выполнив эту команду:
python manage.py migrate simple_app second_migration
после этого вы увидите что-то вроде:
Running migrations:
Rendering model states... DONE
Unapplying simple_app.third_migration OK
эта команда выполняет 2 действия, первое: отменяет изменения схемы таблицы в файле миграции, второе: удаляет имя файла миграции из таблицы django_migration)
- Нужно удалить файл third_migration.py из папки migration
После этих шагов вы можете исправить проблему с моделью и после этого вы можете выполнить команды makemigrations
и migrate
для повторного выполнения изменений в базе данных
Потому что вы не выполнили указанные шаги, вы получаете сообщение "нет изменений", выполните шаги, и я думаю, что ваша проблема будет решенаenter code here