простой код комментария не будет взаимодействовать с приложением уведомлений - PullRequest
1 голос
/ 04 июня 2019

мой код для комментариев работает нормально, но как только я добавляю функцию уведомлений, она не работает, а уведомления вроде как работают.Я использую стороннее приложение django -tification-hq.отсюда: https://github.com/django-notifications/django-notifications

вот мой код

class Comment(models.Model):
    post = models.ForeignKey(Post, on_delete=models.CASCADE)
    author = models.ForeignKey(settings.AUTH_USER_MODEL,  on_delete=models.CASCADE)
    message = models.TextField()
    ordered = models.BooleanField(default=False)

    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)

    class Meta:
        ordering = ['-id']

    def get_edit_url(self):
        return reverse('comment_edit', args=[self.post.pk, self.pk])

    def get_delete_url(self):
        return reverse('comment_delete', args=[self.post.pk, self.pk])

    def save(self, *args, **kwargs):
        notify.send(self.author, recipient=self.post.author, action_object=self.post, target=self, verb="commented on")

views.py

@login_required
def comment_new(request, post_pk):
    post = get_object_or_404(Post, pk=post_pk)
    if request.method == 'POST':
        form = CommentForm(request.POST)
        if form.is_valid():
            comment = form.save(commit=False)
            comment.post = post
            comment.author = request.user
            comment.save()
            return redirect(comment.post)
    else:
        form = CommentForm()
    return render(request, 'community/comment_form.html', {
        'form':form,
        })

urls.py

 path('post/<int:post_pk>/comment/new',views.comment_new, name='comment_new'),

Я добавилэта единственная строка,

def save(self, *args, **kwargs):
            notify.send(self.author, recipient=self.post.author, action_object=self.post, target=self, verb="commented on")

Моя новая модель

class Comment(models.Model):
    post = models.ForeignKey(Post, on_delete=models.CASCADE)
    author = models.ForeignKey(settings.AUTH_USER_MODEL,  on_delete=models.CASCADE)
    message = models.TextField()
    ordered = models.BooleanField(default=False)

    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)

    class Meta:
        ordering = ['-id']

    def get_edit_url(self):
        return reverse('comment_edit', args=[self.post.pk, self.pk])

    def get_delete_url(self):
        return reverse('comment_delete', args=[self.post.pk, self.pk])

        def save(self, *args, **kwargs):
            notify.send(self.author, 
                        recipient=self.post.author, 
                        action_object=self.post, 
                        target=self, 
                        verb="commented on")

        super(Comment, self).save(*args, **kwargs)

    error message: NameError: name 'Comment' is not defined

Ответы [ 2 ]

1 голос
/ 04 июня 2019

Вы перезаписываете метод сохранения в модели, вам нужно передать аргументы в super() впоследствии, чтобы сохранить основное поведение. Приведенный ниже код должен заставить его работать как прежде:

def save(self, *args, **kwargs):
    notify.send(self.author, 
                recipient=self.post.author, 
                action_object=self.post, 
                target=self, 
                verb="commented on")

    super(Class, self).save(*args, **kwargs)

попробуйте это:

class Comment(models.Model):
    post = models.ForeignKey(Post, on_delete=models.CASCADE)
    author = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
    message = models.TextField()
    ordered = models.BooleanField(default=False)

    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)

    class Meta:
        ordering = ['-id']

    def get_edit_url(self):
        return reverse('comment_edit', args=[self.post.pk, self.pk])

    def get_delete_url(self):
        return reverse('comment_delete', args=[self.post.pk, self.pk])

    def save(self, *args, **kwargs):
        notify.send(self.author, 
                    recipient=self.post.author, 
                    action_object=self.post, 
                    target=self, 
                    verb="commented on")

        super(Comment, self).save(*args, **kwargs)
1 голос
/ 04 июня 2019

Вы добавили пользовательскую логику в обработчик save, но без вызова super вы полностью переопределили базовую логику save.

Ваше утверждение о проблеме слишком расплывчато, чтобы быть уверенным, но я думаю, что добавление super().save(*args, **kwargs) в ваш пользовательский метод save решит любую проблему, с которой вы столкнулись.

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