I'm working on a Django project with some apps, but from the beginning, I had problems with 'makemigrations' and 'migrate'. These two are giving me some non-sens errors that I can't find solutions to. And from yesterday when I copied someones else code and replaced it with mine, 'makemigrations' works but 'migrate' doesn't. Here are my models.py:
from django.db import models
from django.utils.translation import gettext_lazy as _
# third party apps
from mptt.models import MPTTModel, TreeForeignKey
from ckeditor.fields import RichTextField
# Local apps
from account.models import User
from extentions.utils import jalali_converter
class Category(MPTTModel):
title = models.CharField(max_length=100, verbose_name=_('عنوان'))
parent = TreeForeignKey('self', on_delete=models.CASCADE, null=True, blank=True,
related_name="children", verbose_name=_('فرزند'))
is_child = models.BooleanField(default=False, verbose_name=_('فرزند است؟'))
slug = models.SlugField(unique=True, null=True, blank=True, allow_unicode=True)
created = models.DateTimeField(auto_now_add=True, verbose_name=_('زمان ساخت'))
updated = models.DateTimeField(auto_now=True, verbose_name=_('زمان بروزرسانی'))
class Meta:
verbose_name = _('دسته بندی')
verbose_name_plural = _('دسته بندی ها')
def __str__(self):
return self.title
class Video(models.Model):
creator = models.ForeignKey(User, on_delete=models.CASCADE, related_name='videos',
verbose_name=_('بارگذار'))
title = models.CharField(max_length=100, unique=True, verbose_name=_('عنوان ویدئو'))
slug = models.SlugField(unique=True, null=True, blank=True, allow_unicode=True)
category = models.ManyToManyField(Category, related_name='cvideos',
verbose_name=_('دسته بندی ها'))
about_video = RichTextField(verbose_name=_('درباره ویدئو'))
views = models.PositiveBigIntegerField(default=1, verbose_name=_('بازدید'))
video = models.FileField(upload_to='videos/video_files', verbose_name=_('ویدئو'))
image = models.ImageField(upload_to='videos/pictures/', verbose_name=_('عکس نمایشی'))
time = models.IntegerField(default=1, verbose_name=_('مدت زمان ویدئو'))
created = models.DateTimeField(auto_now_add=True, verbose_name=_('تاریخ ساخت'))
updated = models.DateTimeField(auto_now=True, verbose_name=_('تاریخ بروزرسانی'))
class Meta:
verbose_name = _('ویدئو')
verbose_name_plural = _('ویدئو ها')
def __str__(self):
return self.title[:20]
def video_view(self):
self.views += 1
self.save()
def jalali_date(self):
return jalali_converter(self.created)
jalali_date.short_description = 'تاریخ ساخت'
class Comment(MPTTModel):
user = models.ForeignKey(User, on_delete=models.CASCADE, related_name='user_comments',
verbose_name=_('کاربر'))
video = models.ForeignKey(Video, on_delete=models.CASCADE, related_name='video_comments',
verbose_name=_('ویدئو'))
parent = TreeForeignKey('self', on_delete=models.CASCADE, null=True, blank=True,
related_name='children', verbose_name=_('والد'))
body = models.TextField(max_length=400, verbose_name=_('متن'))
created = models.DateTimeField(auto_now_add=True, verbose_name=_('تاریخ ساخت'))
updated = models.DateTimeField(auto_now=True, verbose_name=_('تاریخ بروزرسانی'))
class Meta:
verbose_name = _('نظرات')
verbose_name_plural = _('نظرات')
def __str__(self):
return self.body[:20]
class Like(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE, related_name='user_likes',
verbose_name='کاربر')
video = models.ForeignKey(Video, on_delete=models.CASCADE, related_name='video_likes',
verbose_name='ویدئو')
created = models.DateTimeField(auto_now_add=True, verbose_name='تاریخ ساخت')
class Meta:
verbose_name = 'لایک'
verbose_name_plural = 'لایک ها'
ordering = ['-created']
def __str__(self):
return f"{self.user.fullname} - {self.video.title}"
def jalali_date(self):
return jalali_converter(self.created)
jalali_date.short_description = 'تاریخ ساخت'
Here are my admin.py
# Django packages
from django.contrib import admin
# Third party apps
from mptt.admin import DraggableMPTTAdmin
# Local apps
from . import models
@admin.register(models.Video)
class VideoAdmin(admin.ModelAdmin):
list_display = ('creator', 'views', 'jalali_date')
list_filter = ('creator', 'created', 'updated')
search_fields = ('description', 'about_video')
raw_id_fields = ('creator',)
prepopulated_field = {'slug': ('title',)}
admin.site.register(
models.Category,
DraggableMPTTAdmin,
list_display=(
'tree_actions',
'indented_title',
),
list_display_links=(
'indented_title',
),
prepopulated_field={'slug': ('name',)}
)
admin.site.register(
models.Comment,
DraggableMPTTAdmin,
list_display=(
'tree_actions',
'indented_title',
),
list_display_links=(
'indented_title',
),
)
@admin.register(models.Like)
class LikeAdmin(admin.ModelAdmin):
list_display = ('user', 'video', 'jalali_date')
list_filter = ('user', 'created')
search_fields = ('user', 'video')
this is another model file which I customized the User model in it:
from django.db import models
from django.contrib.auth.models import AbstractBaseUser, PermissionsMixin
from django.utils.translation import gettext_lazy as _
# Third party apps
from ckeditor.fields import RichTextField
# Local apps
from .managers import UserManager
class User(AbstractBaseUser, PermissionsMixin):
email = models.EmailField(max_length=255, unique=True, verbose_name=_('آدرس ایمیل'))
phone_number = models.CharField(max_length=11, unique=True, verbose_name=_('تلفن همراه'))
fullname = models.CharField(max_length=255, verbose_name=_('نام کامل'))
bio = RichTextField(null=True, blank=True, verbose_name=_('بیوگرافی'))
image = models.ImageField(upload_to='user/images/', null=True, blank=True,
verbose_name=_('تصویر پروفایل'))
is_active = models.BooleanField(default=True, verbose_name=_('فعال'))
is_admin = models.BooleanField(default=False, verbose_name=_('ادمین'))
objects = UserManager()
USERNAME_FIELD = 'email'
REQUIRED_FIELDS = ['fullname']
class Meta:
verbose_name = _('کاربر')
verbose_name_plural = _('کاربرها')
def __str__(self):
return self.phone_number
@property
def is_staff(self):
return self.is_admin
admin.py:
# Django packages
from django.contrib import admin
from django.contrib.auth.admin import UserAdmin as BaseUserAdmin
# Local apps
from .models import User
from .forms import UserCreationForm, UserChangeForm
from .managers import UserManager
class UserAdmin(BaseUserAdmin):
form = UserChangeForm
add_form = UserCreationForm
list_display = ('phone_number', 'email', 'fullname', 'is_admin')
list_filter = ('is_active', 'is_admin')
fieldsets = (
('Main', {'fields': (
'email', 'phone_number', 'fullname', 'bio', 'age', 'image', 'password'
)}),
('Permissions', {'fields': (
'is_active', 'is_admin', 'is_superuser', 'groups', 'user_permissions')}
),
)
add_fieldsets = (
(None, {'fields': (
'phone_number', 'email', 'fullname', 'password1', 'password2')}
),
)
search_fields = ('phone_number', 'email', 'fullname')
ordering = ('email',)
filter_horizontal = ('groups', 'user_permissions')
def get_form(self, request, obj=None, **kwargs):
form = super().get_form(request, obj, **kwargs)
is_superuser = request.user.is_superuser
if not is_superuser:
form.base_fields['is_superuser'].disable = True
return form
admin.site.register(User, UserAdmin)
I've deleted the files in migrations folders, (except init.py) thousand times, but after 'makemigratino' the files are created but then when I run python manage.py migrate, I face this every time 'Running migrations: No migrations to apply.'
I even deleted the SQLite with 'python manage.py flush', but again it didn't migrate anything. And this doesn't help to run the project and whenever I run it, I face this: 'no such column: video_video.about_video'. I'll be so glad if you can help me with this