Попытка решить не такой столбец: blog_comment.url - PullRequest
0 голосов
/ 20 апреля 2020

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

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

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

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

Обновление - изменено созданный_он

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(default = timezone.now())
    active = models.BooleanField(default=False)
    url= models.SlugField(max_length=500, unique=True, blank=True)

1 Ответ

0 голосов
/ 20 апреля 2020

Измените поле на следующее:

created_on= models.DateTimeField(default = timezone.now())

Пожалуйста, изучите документацию:

1. https://docs.djangoproject.com/en/3.0/ref/models/fields/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...