首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Django OperationalError at /book/add_review_to_book

Django OperationalError at /book/add_review_to_book
EN

Stack Overflow用户
提问于 2017-09-06 20:10:42
回答 1查看 492关注 0票数 0

我在这个错误上被困了2天,我对Django很陌生,我试图为books.When写评论--我打开评论表单并键入一些文本,在提交之后,我得到了这个错误-

代码语言:javascript
复制
OperationalError at /books/add_review_to_book/8
table books_review has no column named book_id.

对我来说一切都还好,这是密码:

我的models.py

代码语言:javascript
复制
class Book(models.Model):

    user = models.ForeignKey(User, default=1)
    title = models.CharField(max_length=100, null=True)
    author = models.ForeignKey('Author', on_delete=models.CASCADE, null=True)

    def __str__(self):
        return self.title + ' - ' + self.author


class Author(models.Model):
    first_name = models.CharField(max_length=50, null=True)
    last_name = models.CharField(max_length=50, null=True)


class Review(models.Model):
    book = models.ForeignKey('Book', related_name='reviews')
    author = models.CharField(max_length=200)
    text = models.TextField()
    created_date = models.DateTimeField(default=timezone.now)

    def __str__(self):
        return self.text

我的views.py:

代码语言:javascript
复制
def add_review_to_book(request, id):
    book = get_object_or_404(Book, id=id)
    if request.method == "POST":
        form = ReviewsForm(request.POST)
        if form.is_valid():
            review = form.save(commit=False)
            review.book = book
            review.save()
            return redirect('book_detail.html', id=book.id)
    else:
        form = ReviewsForm()
    return render(request, 'books/add_review_to_book.html', {'form': form})

我的forms.py:

代码语言:javascript
复制
class ReviewsForm(forms.ModelForm):

    class Meta:
        model = Review
        fields = ('author', 'text')

我的add_review_to_book格式的html:

代码语言:javascript
复制
{% block content %}
        <hr>
    <a class="btn btn-default" href="{% url 'add_review_to_book' id=book.id %}">Add review</a>
{% for review in book.reviews.all %}
    {% if user.is_authenticated %}
    <div class="review">
        <div class="date">
            {{ review.created_date }}
        </div>
        <strong>{{ review.author }}</strong>
        <p>{{ review.text|linebreaks }}</p>
    </div>
    {% endif %}
{% empty %}
    <p>No comments</p>
{% endfor %}
{% endblock content %}

我删除了迁移,并再次进行迁移,但当我尝试编写评论时,仍然会遇到相同的错误。提前谢谢。

编辑:在dbshell中运行.schema books_review之后的结果-

CREATE TABLE IF NOT EXISTS "books_review" ("id" integer NOT NULL PRIMARY KEY AUTOINCREMENT, "text" text NOT NULL);

还有table books_review has no column named book_id :(

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-09-06 21:31:58

正如我所看到的,您没有两个字段bookauthor,可能您破坏了迁移,尝试执行接下来的步骤:

  1. 转储数据./manage.py dumpdata auth.user > users.json
  2. ./manage.py dumpdata books.book > book.json
  3. 删除sqlite数据库rm db.sqlite3
  4. 删除迁移文件夹rm -rf books/migrations
  5. 重新创建书籍\迁移mkdir books/migrations
  6. 创建init.py touch books\migrations\__init__.py
  7. 创建新的迁移./manage.py makemigrations
  8. 应用迁移./manage.py migrate
  9. 负载数据./manage.py loaddata *.json
  10. 测试您的代码

希望它能帮到你

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46083579

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档