制作 django AJAX likes 时出现操作错误
Posted
技术标签:
【中文标题】制作 django AJAX likes 时出现操作错误【英文标题】:An operational error when making django AJAX likes 【发布时间】:2021-04-22 08:35:19 【问题描述】:这是我得到的错误。
django.db.utils.OperationalError:没有这样的表:photos_post_likes
我关注这个视频是为了创建一个赞按钮。 https://youtu.be/pkPRtQf6oQ8
那时我已经创建了模型(帖子)。就在我在 models.py 中添加新行(喜欢)并运行 makemigrations 时,它迁移没有任何问题。但是,当我运行迁移时,出现了这个错误。
这是models.py文件
from django.db import models
from django.utils import timezone
from django.urls import reverse
from django.contrib.auth.models import User
from PIL import Image
class Post(models.Model):
date_shared = models.DateTimeField(default=timezone.now)
caption = models.TextField(max_length=50)
user = models.ForeignKey(User, on_delete=models.CASCADE)
likes = models.ManyToManyField(User, blank=True, related_name='post_likes') # this line made the error occur
image = models.ImageField(upload_to='post_images')
def __str__(self):
return self.caption
def save(self):
super().save()
img = Image.open(self.image.path)
if img.height > 800 or img.width > 800:
output_size = (800, 800)
img.thumbnail(output_size)
img.save(self.image.path)
def get_absolute_url(self):
return reverse('home')
【问题讨论】:
【参考方案1】:尝试运行以下命令:
python manage.py migrate --fake
我不会浪费时间深入了解该命令的具体作用,正如您所见 关于该主题的精彩帖子就在这里:Django migrate --fake and --fake-initial explained
如果错误仍然存在,您应该删除位于 migrations 文件夹 (init.py 除外) 内的所有文件,并且之后删除数据库中的所有表。
然后简单地运行:
python manage.py makemigrations
python manage.py migrate
再次,一切都应该工作。 但请记住,删除表格当然也会丢失其中保存的所有数据/查询。
如果这对你有用,请告诉我,因为它以前对我有用过很多次。
【讨论】:
它没有删除任何内容。我现在应该手动删除它吗? @Poornaka 你说的“它”到底是什么意思? @Poornaka 好吧,如果命令 'python manage.py migrate --fake' 没有为您解决问题,那么您应该连接到您的数据库并通过 SQL 手动删除表。如果您说出您使用的是哪种 SQL-DB,我什至可以告诉您如何操作。 等等...你的意思是它会删除项目或应用程序中的迁移文件夹吗? (命令) @Poornaka 不,请仔细阅读。第 1 步:删除应用中“迁移”文件夹中除“init.py”以外的所有文件。第 2 步:手动删除数据库中的所有表。第 3 步:重新运行命令“python manage.py makemigrations”和“python manage.py migrate”。以上是关于制作 django AJAX likes 时出现操作错误的主要内容,如果未能解决你的问题,请参考以下文章
使用ajax在Django中点击like按钮时如何改变like按钮的颜色并增加一
Django Ajax Likes 工作不正确:jQuery 的问题
Django3 Like Ajax Button Book By Antonio Mele