问题描述
在尝试使用GenericForeignKey和Content_type创建注释系统时,将django降级到2.1或更低版本时效果很好,但是却出现错误消息,提示“ ContentType匹配查询不存在”。如果我尝试使用django3.x。 下面是代码片段
class CommentManager(models.Manager):
def filter_by_instance(self,instance):
content_type = ContentType.objects.get_for_model(instance.__class__)
obj_id = instance.id
qs = super(CommentManager,self).filter(content_type=content_type,object_id=obj_id)
return qs
class Comment(models.Model):
user = models.ForeignKey(User,on_delete=models.CASCADE)
content_type=models.ForeignKey(ContentType,on_delete=models.CASCADE)
object_id = models.PositiveIntegerField()
content_object = GenericForeignKey()
content = models.TextField()
time_stamp = models.DateTimeField(auto_now_add=True)
objects = CommentManager()
def __str__(self):
return self.user.username
#Forms.py
class CommentForm(forms.Form):
content_type = forms.CharField(widget=forms.HiddenInput)
object_id = forms.IntegerField(widget=forms.HiddenInput)
content = forms.CharField(widget=forms.Textarea)
#views.py
def detail(request,id):
obj = get_object_or_404(Blog,id=id)
obj_id = obj.id
initial_data = {
"content_type": obj.get_content_type,"object_id": obj.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
)
if created:
print("It worls \n")
context = {
'form':form
}
return render(request,'blod_detail.html',context )
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)