好的,已经有一段时间了,但我无法解决或理解这个问题。我也查看了其他具有相同或相似标题的问题,但我认为这个问题似乎有所不同。我不是django及其管理员的专业人士,但是尝试。所以任何帮助都会很棒。
我目前正在尝试构建一个用于列出粉丝资料的管理界面。 (有粉丝和着名用户)我能够通过deleted post count
列出它们。即。他们发布了一些内容,这可以由版主删除,但不是用户自己删除。我为它写了一个SQL查询。
sql_deleted_post_count = """
SELECT COUNT(*)
FROM posts_post
WHERE posts_post.state = {state_deleted} AND posts_post.deleted_by_id != posts_post.user_id AND
posts_post.user_id = profiles_user.id
""".format(state_deleted=Post.STATE_DELETED)
首先,这似乎没问题。它列出了正确用户的正确结果。但是当我尝试在django管理面板的search
部分中搜索粉丝配置文件时,问题就开始了。
Here you can see the search section and the correct deleted post count lists
当我想搜索粉丝资料时,会发生以下情况:
ProgrammingError at /cp/profiles/fanprofile/
missing FROM-clause entry for table "profiles_user"
LINE 5: posts_post.user_id = profiles_user.id
^
但我可以看到,在列出已删除的帖子计数时,查询工作正常。
这是来自admin.py
的fanprofile类class FanProfileAdmin(OSMGeoAdmin, BaseUserAdmin):
model = FanProfile
actions = ("send_push_notification",)
fieldsets = (
(None, {'fields': ('email', 'username', 'password')}),
(_('Profile'), {'fields': ('full_name', 'avatar', 'year_of_birth', 'gender', 'language', 'about', 'location_name', "abuse_report_validity_score",)}),
(_('Permissions'), {'fields': ('receive_message', 'is_visible', 'is_profile_visible', 'is_staff', 'is_superuser',
'groups', 'user_permissions')}),
(_('Important dates'), {'fields': ('last_login', 'date_joined')}),
)
add_fieldsets = (
(None, {
'classes': ('wide',),
'fields': ('email', 'username', 'password1', 'password2')
}),
)
add_form = FanCreationForm
list_display = ('username', 'email', 'is_profile_visible', "abuse_report_validity_score", 'is_staff', 'date_joined', 'deleted_post_count')
readonly_fields = ("date_joined", "language", "abuse_report_validity_score", "is_visible", "is_profile_visible")
def get_urls(self):
return self.get_push_notification_urls() + super(FanProfileAdmin, self).get_urls()
def has_add_permission(self, request):
return False
def suit_row_attributes(self, obj, request):
if not obj.is_visible:
return {'class': 'error'}
def delete_model(self, request, obj):
obj.log_action("Deactivated", log_user_id=request.user.id)
super(FanProfileAdmin, self).delete_model(request, obj)
def get_queryset(self, request):
queryset = super(FanProfileAdmin, self).get_queryset(request)
sql_deleted_post_count = """
SELECT COUNT(*)
FROM posts_post
WHERE posts_post.state = {state_deleted} AND posts_post.deleted_by_id != posts_post.user_id AND
posts_post.user_id = profiles_user.id
""".format(state_deleted=Post.STATE_DELETED)
return queryset.annotate(total_deleted_post_count=RawSQL(sql_deleted_post_count, []))
def deleted_post_count(self, obj):
return obj.total_deleted_post_count
deleted_post_count.admin_order_field = "total_deleted_post_count"
当我尝试搜索粉丝资料而不是列出已删除的帖子计数时,我不知道为什么这会导致问题。 能否请你帮忙 ?
修改 我正在使用postgre sql。
感谢。