Django hitcount order_by ( "hit_count_generic__hits")는 PostgreSQL 데이터베이스에서 오류를 제공합니다.

Naeem Akhtar

내 Post 모델의 조회수를 계산하기 위해 django-hitcont사용했습니다 . 이 쿼리를 사용하여 내 ListView에서 가장 많이 본 게시물을 얻으려고하는데 objects.order_by('hit_count_generic__hits')SQLite에서 잘 작동하지만 PostgreSQL에서는 다음 오류가 발생 django.db.utils.ProgrammingError: operator does not exist: integer = text LINE 1: ...R JOIN "hitcount_hit_count" ON ("posts_post"."id" = "hitcoun...합니다.

models.py

class Post(models.Model, HitCountMixin):
    author = models.ForeignKey(User, related_name='authors', on_delete=models.CASCADE)
    title = models.CharField('Post Title', max_length = 150)
    description = models.TextField('Description', max_length=1000, blank = True)
    date_posted = models.DateTimeField('Date posted', default = timezone.now)
    date_modifed = models.DateTimeField('Date last modified', default = timezone.now)
    document = models.FileField('Document of Post', upload_to='documents', \
     validators=[FileExtensionValidator(allowed_extensions = ['pdf', 'docx']), validate_document_size] \
    )
    hit_count_generic = GenericRelation(
    HitCount,
    object_id_field='object_pk',
    related_query_name='hit_count_generic_relation'
   )

views.py

queryset = Post.objects.order_by('hit_count_generic__hits') 

문제와 관련된 Github 에서이 문제를 발견 했지만 여전히 언급 된 해결 방법을 파악할 수 없습니다.

마린 타이거

다른 유형 (이 예제에서는 정수 및 텍스트)을 비교할 때 같음 연산자가이 예외를 발생시킵니다. 이를 해결하려면 HitCount 모델 pk 필드를 정수로 변환하면됩니다. 이를 위해 마이그레이션 작업을 생성하고 적용해야합니다. Django는 이런 종류의 작업을 처리하기에 정말 좋은 프레임 워크입니다. 값이 null이 아니고 정수로 "변환 가능"한지 확인하기 만하면됩니다. 필드 유형을 변경하고 아래의 두 명령을 실행하십시오.

python manage.py makemigrations
python manage.py migrate

모델을 업데이트하기 전에 실패 할 경우 백업을 수행하는 것이 좋습니다. 이것은 쉬운 작업은 아니지만이 링크를 따라가는 동안 진행되는 작업을 이해할 수 있습니다. 마이그레이션은 초기 데이터를 덤프하고 복원 합니다. 테이블의 데이터에 신경 쓰지 않는다면 테이블을 삭제하고 새로운 마이그레이션 파일을 생성 한 다음 테이블을 다시 생성하십시오.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

Related 관련 기사

뜨겁다태그

보관