【问题标题】:I trial make Notification for Comment我尝试制作评论通知
【发布时间】:2021-07-11 23:54:30
【问题描述】:

我尝试制作评论通知

通过多对多关系 如何修复它 引发类型错误( TypeError:禁止直接分配到多对多集合的前向端。请改用 NotfFaId.set()。 [2021 年 4 月 17 日 03:37:31] "POST /forum/addcomment/HTTP/1.1" 500 73061

class CommentT(MPTTModel):
    Topic = models.ForeignKey(Topic, on_delete=models.CASCADE, related_name='comments')
    author = models.ForeignKey( User, on_delete=models.CASCADE, related_name='author')
    parent = TreeForeignKey('self', on_delete=models.CASCADE, null=True, blank=True, related_name='children')
    NotfFaId = models.ManyToManyField( User, related_name='NotfFaVId', default=None, blank=True)
   
    content = models.TextField()
    publish = models.DateTimeField(auto_now_add=True)
    status = models.BooleanField(default=True)

    class MPTTMeta:
        order_insertion_by = ['publish']



def addcomment(request):

if request.method == 'POST':

    if request.POST.get('action') == 'delete':
        id = request.POST.get('nodeid') 
        c = CommentT.objects.get(id=id)
        c.delete()
        return JsonResponse({'remove': id})
    else:
        comment_form = NewCommentTForm(request.POST)
        # print(comment_form)
        if comment_form.is_valid():
            user_comment = comment_form.save(commit=False)
            result = comment_form.cleaned_data.get('content')
            user = request.user.username
            user_comment.author = request.user
            user_comment.NotfFaId = request.user
            user_comment.save()
            Topic.objects.get(id = request.POST.get('Topic') ).NotfFaV.add(request.user)
            # CommentT.objects.get(id=user_comment.id).NotfFaId.add(request.user)
            return JsonResponse({'result': result, 'user': user,'id': user_comment.id })

【问题讨论】:

  • 您应该使用更详细的名称,根本不清楚“NotfFaId”应该是什么。错误很明显,保存模型后使用user_comment.NotfFaId.set(request.user)
  • 不工作 , raise ValueError('"%r" need to have a value for field "%s" before ' ValueError: "" 需要有在可以使用这种多对多关系之前,字段“id”的值。
  • 致电user_comment.NotfFaId.set(request.user) 之后 user_comment.save()。在保存关系的双方之前,您不能添加多对多的条目

标签: python django ajax model


【解决方案1】:

不工作, raise ValueError('"%r" 需要在 ' 之前为字段 "%s" 有一个值 ValueError: "" 需要有一个字段 "id" 的值才能使用这种多对多关系。

def addcomment(request):
if request.method == 'POST':

    if request.POST.get('action') == 'delete':
        id = request.POST.get('nodeid') 
        c = CommentT.objects.get(id=id)
        c.delete()
        return JsonResponse({'remove': id})
    else:
        comment_form = NewCommentTForm(request.POST)
        # print(comment_form)
        if comment_form.is_valid():
            user_comment = comment_form.save(commit=False)
            result = comment_form.cleaned_data.get('content')
            user = request.user.username
            user_comment.author = request.user

            user_comment.NotfFaId.set( request.user )

            user_comment.save()
            Topic.objects.get(id = request.POST.get('Topic') ).NotfFaV.add(request.user)
            return JsonResponse({'result': result, 'user': user,'id': user_comment.id })

【讨论】:

    【解决方案2】:

    感谢伊恩·谢尔文顿, 是字

    我在user_comment.save() 之后调用了CommentT.objects.get(id=user_comment.id).NotfFaId.add(request.user)。在保存关系的双方之前,您不能添加许多条目 – Iain Shelvington 2 小时前

      def addcomment(request):
    
        if request.method == 'POST':
    
            if request.POST.get('action') == 'delete':
                id = request.POST.get('nodeid') 
                c = CommentT.objects.get(id=id)
                c.delete()
                return JsonResponse({'remove': id})
            else:
                comment_form = NewCommentTForm(request.POST)
                # print(comment_form)
                if comment_form.is_valid():
                    user_comment = comment_form.save(commit=False)
                    result = comment_form.cleaned_data.get('content')
                    user = request.user.username
                    user_comment.author = request.user
                    # user_comment.NotfFaId.set( request.user )
                    user_comment.save()
                    Topic.objects.get(id = request.POST.get('Topic') ).NotfFaV.add(request.user)
                    CommentT.objects.get(id=user_comment.id).NotfFaId.add(request.user)
                    return JsonResponse({'result': result, 'user': user,'id': user_comment.id })
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-03-31
      • 2015-12-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-02
      • 2022-11-20
      相关资源
      最近更新 更多