Django - 缺少表的FROM子句条目

时间:2017-06-28 12:04:28

标签: python sql django postgresql django-admin

好的,已经有一段时间了,但我无法解决或理解这个问题。我也查看了其他具有相同或相似标题的问题,但我认为这个问题似乎有所不同。我不是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。

感谢。

0 个答案:

没有答案