我对django的内置注释模型进行了简单的查询,并使用heroku的postgreSQL数据库获取下面的错误:
DatabaseError: operator does not exist: integer = text LINE 1:
... INNER JOIN "django_comments" ON ("pi ns_pin"."id" = "django_...
^
HINT: No operator matches the given name and argument type(s).
You might need to add explicit type casts.
Run Code Online (Sandbox Code Playgroud)
在谷歌搜索之后似乎这个错误在django之前已经被解决了很多次,但我仍然得到它(所有相关问题都在3 - 5年前关闭).我正在使用django 1.4版和最新版本的tastypie.
查询是在orm过滤器下进行的,并且与我的开发数据库(sqlite3)完美配合:
class MyResource(ModelResource):
comments = fields.ToManyField('my.api.api.CmntResource', 'comments', full=True, null=True)
def build_filters(self, filters=None):
if filters is None:
filters = {}
orm_filters = super(MyResource, self).build_filters(filters)
if 'cmnts' in filters:
orm_filters['comments__user__id__exact'] = filters['cmnts']
class CmntResource(ModelResource):
user = fields.ToOneField('my.api.api.UserResource', 'user', full=True) …Run Code Online (Sandbox Code Playgroud) 我一直在阅读关于评论框架的django文档以及如何自定义它(http://docs.djangoproject.com/en/1.1/ref/contrib/comments/custom/)在该页面中,它显示了如何向表单添加新字段.但我想要做的是删除不必要的字段,如URL,电子邮件(以及其他次要的mod).
在同一个doc页面上,它说要走的路是从BaseCommentAbstractModel扩展我的自定义注释类,但就是这样,我到目前为止,现在我不知所措.我在这个具体方面找不到任何东西.
我完全理解扩展Django中的评论应用程序的文档,并且真的想坚持使用自动功能但是 ......
在当前的应用程序中,我绝对没有使用"URL"与评论一起提交.
作为微创默认设置的,我怎么能阻止这一领域的显示与评论表单起来?
使用Django 1或Trunk,以及尽可能多的通用/内置函数(通用视图,默认注释设置等等.到目前为止,我只有一个通用的视图包装器).
我正在使用django.contrib.comments.views.moderation模块中的delete()函数.工作人员可以删除任何评论帖,这完全没问题.但是,我还想让已登记的非工作人员有权删除他们的OWN评论帖子和他们自己的OWN.我怎么能做到这一点?
我正在使用django为我生成的表单.我在博客中的帖子之后将其用作评论表单.
目前它渲染得很好,但它没有很好地对齐.这就是我所拥有的.
这就是我想要的. 
谢谢
编辑:这是我用户{{form.as_table}}时的结果

在注释模型的任何字段上运行distinct()始终返回所有记录,
Comment.objects.values( '用户').不同的()
[{'user':1},{'user':0},{'user':0},{'user':0},{'user':0},{'user':1},{ 'user':1},{'user':1},{'user':1}]
Comment.objects.values( 'IP_ADDRESS').不同的()
[{'ip_address':u'127.0.0.1'},{'ip_address':u'192.168.0.180'},{'ip_address':u'192.168.0.180'},{'ip_address':u'192.168.0.180 '},{'ip_address':u'192.168.0.180'},{'ip_address':u'192.168.0.180'},{'ip_address':u'192.168.0.180'},{'ip_address':u'192.168.0.180'},{'ip_address':u' 192.168.0.180' }]
为什么会这样?有没有解决的办法?谢谢!
ps:distinct()在我的测试期间在自定义模型的不同类型的字段中运行得非常好.关于评论框架的一些特别之处?
结论总结 感谢大家回答这个问题,再加上一些阅读,我得出如下结论:
在查找中使用distinct()将导致sql看起来像这样:
SELECT DISTINCT [fields1,fields2,fields3] FROM ... WHERE ...
并且所有字段的值一起决定记录是否唯一.这些字段可能来自查找中的values()或order_by()函数.
因此order_by()在与distinct()结合时添加一些不需要的效果,order_by中指定的字段也会考虑记录是否唯一
Django Comment默认有一个隐藏的order_by参数,从而创建了整个问题.任何模型在返回qs时都会隐藏order_by会导致同样的问题.
从文档:"Django的评论框架已被弃用,不再受支持.大多数用户将更好地使用自定义解决方案或像Disqus这样的托管产品.以前称为django.contrib.comments的代码仍然可用于外部存储库."
移动到django-contrib-comments只是使用django.contrib.comments的现有项目的后备吗?我应该在新项目中使用django-contrib-comments以及为什么(不是)?
我的Django网站有一个Photo模型,代表系统中的照片,我用它Django.contrib.comments来允许用户评论这些.这一切都运行正常,但我想扩展我的Tastypie API,以允许我PhotoResource使用URL 访问评论,例如/api/v1/photo/1/comments1是照片的ID.我能够让URL工作正常,但无论我正在做什么样的过滤,我似乎总是返回完整的注释集,而不仅仅是提供的照片集.我在下面列出了我当前代码API的精选内容:
class CommentResource(ModelResource):
user = fields.ForeignKey(UserResource, 'user')
class Meta:
queryset = Comment.objects.all()
filtering = {
'user': ALL_WITH_RELATIONS,
}
class PhotoResource(ModelResource):
user = fields.ForeignKey(UserResource, 'user')
class Meta:
queryset = Photo.objects.all()
filtering = {
'id': 'exact',
'user': ALL_WITH_RELATIONS
}
def prepend_urls(self):
return [url(r"^(?P<resource_name>%s)/(?P<pk>\w[\w/-]*)/comments%s$" % (self._meta.resource_name, trailing_slash()), self.wrap_view('get_comments'), name="api_get_comments"),
]
def get_comments(self, request, **kwargs):
try:
obj = self.cached_obj_get(request=request, **self.remove_api_resource_names(kwargs))
except ObjectDoesNotExist:
return HttpGone()
except MultipleObjectsReturned:
return HttpMultipleChoices("More than one resource is found at this URI.") …Run Code Online (Sandbox Code Playgroud) django ×10
django-comments ×10
python ×3
django-forms ×2
tastypie ×2
distinct ×1
formatting ×1
heroku ×1
postgresql ×1
styling ×1
zinnia ×1