【问题标题】:ContentType matching query does not exist on django 2.2django 2.2 上不存在 ContentType 匹配查询
【发布时间】:2019-08-04 03:41:51
【问题描述】:

我一直在使用 django 构建博客,当我尝试在每个帖子下创建评论部分时,我得到评论图标(我可以在其中输入一些 cmets)但是当我发布评论时,我立即得到错误,即“ContentType 匹配查询不存在”。

我试图在stack和youtube上找到问题,但他们说解决这个问题需要dumpdata经验

class Comment(models.Model):
    user = models.ForeignKey(settings.AUTH_USER_MODEL, default=1, null=True, on_delete=models.SET_NULL)
    content_type = models.ForeignKey(ContentType, on_delete=models.CASCADE)
    object_id = models.PositiveIntegerField()
    content_object = GenericForeignKey('content_type', 'object_id')
    content = models.TextField()
    timestamp = models.DateTimeField(auto_now_add=True, auto_now=False)


    objects = CommentManager()


def blog_post_detail_view(request, slug):
    instance = get_object_or_404(BlogPost, slug=slug)
    share_string = quote_plus(instance.content)
    initial_data = {
        'content_type': instance.get_content_type,
        'object_id': instance.id
    }

    form = CommentForm(request.POST or None, initial=initial_data)

    if form.is_valid():
        c_type = form.cleaned_data.get('content_type')
        content_type = ContentType.objects.get(model=c_type)
        obj_id = form.cleaned_data.get('object_id')
        content_data = form.cleaned_data.get('content')
        new_comment, created = Comment.objects.get_or_create(
            user=request.user,
            content_type=content_type,
            object_id=obj_id,
            content=content_data
        )

    comments = instance.comments
    template_name = 'blog/detail.html'
    context = {
        "object": instance,
        'comments': comments,
        'share_string': share_string,
        'comment_form': form
    }

    return render(request, template_name, context)


from django import forms


from .models import Comment


    class CommentForm(forms.Form):
        content_type = forms.CharField(widget=forms.HiddenInput)
        object_id = forms.IntegerField(widget=forms.HiddenInput)
        content = forms.CharField(widget=forms.Textarea)

所以基本上我应该发表我的评论,但我得到了错误:“ContentType 匹配查询不存在”。

【问题讨论】:

    标签: python django contenttype


    【解决方案1】:

    你的CommentForm应该是ModelForm,你可以在ModelForm的Meta.widgets中设置widget

    class CommentForm(forms.ModelForm):
    
        class Meta:
            model = Meta
            fields = ('content_type', 'object_id', 'content')
            widgets = {
                'content_type': forms.HiddenInput,
                'object_id': forms.HiddenInput,
            }
    

    这样form.cleaned_data.get('content_type') 将包含实际的ContentType 对象,因此您不必执行ContentType.objects.get

    【讨论】:

    • 非常感谢,它真的很有帮助;)
    猜你喜欢
    • 2020-09-27
    • 2012-07-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-25
    • 1970-01-01
    • 2015-01-28
    • 2022-01-05
    相关资源
    最近更新 更多