Ошибка получения нет такого столбца: blog_comment.url, несмотря на миграцию - PullRequest
0 голосов
/ 18 апреля 2020

Как только пользователь зашел на мой сайт, он мог написать сообщение и обновить его.

Затем я добился прогресса в добавлении функциональности, которая позволяла людям комментировать. Я был на этапе, когда я мог добавлять комментарии из серверной части, и они были бы точно отображены в пользовательской части.

Теперь, когда я пытаюсь обновить сообщения, я получаю сообщение об ошибке.

Первоначально я думал, что проблема была в том, что я не включил поле слагов в своем классе под названием Комментарии. Затем я добавил url= models.SlugField(max_length=500, unique=True, blank=True). Теперь мне нужно сбросить базу данных, связанную с этим классом? Если да, то как мне этого добиться? Или я иду по крайне неправильной касательной?

enter image description here enter image description here

models.py

from django.db import models
from django.utils.text import slugify
from django.utils import timezone
from django.contrib.auth.models import User
from django.urls import reverse


# Create your models here.
class Post(models.Model):
    title = models.CharField(max_length=100)
    content =  models.TextField()
    date_posted = models.DateTimeField(default=timezone.now())
    author = models.ForeignKey(User, on_delete=models.CASCADE)
    url= models.SlugField(max_length=500, unique=True, blank=True)

    def save(self, *args, **kwargs):
        self.url= slugify(self.title)
        super().save(*args, **kwargs)

    def __str__(self):
        return self.title 

    def get_absolute_url(self):
        return reverse('article_detail', kwargs={'slug': self.slug})


class Comment(models.Model):
    post = models.ForeignKey(Post,on_delete=models.CASCADE,related_name='comments')
    name = models.CharField(max_length=80)
    email = models.EmailField()
    body = models.TextField()
    created_on = models.DateTimeField(auto_now_add=True)
    active = models.BooleanField(default=False)
    url= models.SlugField(max_length=500, unique=True, blank=True)

    class Meta:
        ordering = ['created_on']

    def __str__(self):
        return 'Comment {} by {}'.format(self.body, self.name)

    def save(self, *args, **kwargs):
        self.url= slugify(self.post)
        super().save(*args, **kwargs)

    def get_absolute_url(self):
        return reverse('article_detail', kwargs={'slug': self.slug})

views.py

def post_detail(request, pk):
template_name = 'post_detail.html'

comments = Comment.objects.filter(post=pk ,active=True)
post = Post.objects.get(pk=pk)
new_comment = None
# Comment posted
if request.method == 'POST':
    comment_form = CommentForm(data=request.POST)
    if comment_form.is_valid():

        # Create Comment object but don't save to database yet
        new_comment = comment_form.save(commit=False)
        # Assign the current post to the comment
        new_comment.post = post
        # Save the comment to the database
        new_comment.save()
else:
    comment_form = CommentForm()

return render(request, template_name, {'post': post,
                                       'comments': comments,
                                       'new_comment': new_comment,
                                       'comment_form': comment_form})

Миграции

Я сделал (или попытался сделать) необходимые миграции.

WARNINGS:
?: (2_0.W001) Your URL pattern '^activate/(?P<uidb64>[0-9A-Za-z_\-]+)/(?P<token>[0-9A-Za-z]{1,13}-[0-9A-Za-z]{1,20})/$' [name='activate'] has a route that contains '(?P<', begins with a '^', or ends with a '$'. This was likely an oversight when migrating to django.urls.path().
blog.Post.date_posted: (fields.W161) Fixed default value provided.
        HINT: It seems you set a fixed date / time / datetime value as default for this field. This may not be what you want. If you want to have the current date as default, use `django.utils.timezone.now`
Migrations for 'blog':
  blog\migrations\0014_auto_20200420_2034.py
    - Add field url to comment
    - Alter field date_posted on post


# Generated by Django 2.2.6 on 2020-04-20 13:34

import datetime
from django.db import migrations, models
from django.utils.timezone import utc


class Migration(migrations.Migration):

    dependencies = [
        ('blog', '0013_auto_20200410_0107'),
    ]

    operations = [
        migrations.AddField(
            model_name='comment',
            name='url',
            field=models.SlugField(blank=True, max_length=500, unique=True),
        ),
        migrations.AlterField(
            model_name='post',
            name='date_posted',
            field=models.DateTimeField(default=datetime.datetime(2020, 4, 20, 13, 34, 51, 980840, tzinfo=utc)),
        ),
    ]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...