0

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

  • Did you add `mptt` to installed apps? – Bartosz Stasiak Aug 22 '22 at 07:31
  • yes, I did. ` INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'mptt', 'ckeditor', 'extentions', 'base.apps.BaseConfig', 'account.apps.AccountConfig', 'video.apps.VideoConfig', ] ` – mobina sattari Aug 22 '22 at 07:35
  • Have a look at this post. https://stackoverflow.com/questions/72330122/how-to-quickly-reset-django-db-after-changes I used it yesterday, as I had a similar problem. Worked all fine. (but you will loose all your database) – PhilM Aug 22 '22 at 07:47
  • I did what the post said, the whole database id cleared now but it still doesn't migrate anything! @PhilM – mobina sattari Aug 22 '22 at 07:57

1 Answers1

0

In your models try

user = models.OneToManyFields(User, on_delete=models.CASCADE)

And then try

Manoj Tolagekar
  • 1,816
  • 2
  • 5
  • 22