Django : 여러 등급 기준이있는 리뷰 사이트에 대한 등급 평균 생성

등대

Python (3.8) 및 Django 프로젝트에서 작업하면서 여러 기준이있는 검토 시스템을 구현하려고합니다.

참고 : 잠시 검색했지만 내 문제를 구체적으로 해결하는 내용을 읽지 않았습니다.

3 가지 모델이 있습니다.

from django.db import models
from django.conf import settings
from django.urls import reverse


# Create your models here.
class Board(models.Model):
    name = models.CharField(max_length=30, unique=True)
    description = models.CharField(max_length=100)

    def __str__(self):
        return self.name

    def get_reviews_count(self):
        return Review.objects.filter(company__board=self) .count()

    def get_last_review(self):
        return Review.objects.filter(company__board=self) .order_by('created_at') .first()

class Company(models.Model):
    name = models.CharField(max_length=255, unique=True)
    #bio = models.TextField(max_length=4000)
    last_updated = models.DateTimeField(auto_now_add=True)
    board = models.ForeignKey(Board, on_delete = models.CASCADE, related_name='companies')
    starter = models.ForeignKey(
        settings.AUTH_USER_MODEL,
        on_delete=models.CASCADE,
        related_name='companies',
    )
    views = models.PositiveIntegerField(default=0)

    def __str__(self):
        return self.name

    def get_absolute_url(self):
        return reverse('company_detail', args=[str(self.id)])

    def get_recent_reviews(self):
        return self.reviews.order_by('-created_at')

    def get_last_ten_reviews(self):
        return self.reviews.order_by('-created_at')[:10]

class Review(models.Model):
    RATING_CHOICES = (
        ('1', '1'),
        ('2', '2'),
        ('3', '3'),
        ('4', '4'),
        ('5', '5'),
    )
    STAY = (
        ('less than 6 months', 'less than 6 months'),
        ('6 months', '6 months'),
        ('10 months', '10 months'),
        ('12 months', '12 months'),
        ('More than 1 year', 'More than 1 year'),
    )
    YES_NO = (
        ('Yes', 'Yes'),
        ('No', 'No'),
    )
    SECURITY = (
        ('100%', '100%'),
        ('75%', '75%'),
        ('50%', '50%'),
        ('25%', '25%'),
        ('0%', '0%'),
        ('Still waiting', 'Still waiting'),
    )

    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(null=True)
    created_by = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete = models.CASCADE, related_name='reviews')
    updated_by = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete = models.CASCADE, null=True, related_name='+')
    company = models.ForeignKey(Company, on_delete = models.CASCADE, related_name='reviews')
    address = models.CharField(max_length=200, blank=False, default="")
    length_of_stay = models.CharField(max_length=20, choices=STAY, blank=False)
    #Apartment Condition
    move_in_condition = models.CharField(max_length=5,choices=RATING_CHOICES)
    #Landlord Interaction
    treatment = models.CharField(max_length=5, choices=RATING_CHOICES, blank=False, default ="3")
    response_speed = models.CharField(max_length=5, choices=RATING_CHOICES, blank=False, default ="3")
    maintenance_quality = models.CharField(max_length=5, choices=RATING_CHOICES, blank=False, default ="3")

    security_deposit_returned = models.CharField(max_length=5, choices=SECURITY, blank=False, default ="1")
    #put text "ignore if still waiting"
    is_this_a_fair_amount = models.CharField(max_length=5, choices=YES_NO, blank=False, default="1")
    would_you_recommend = models.CharField(max_length=5, choices=YES_NO, blank=False, default="1")
    additional_comments = models.TextField(max_length=4000)

    def __str__(self):
        return self.address

Views.py

def board_companies(request, pk):
    board = get_object_or_404(Board, pk=pk)
    companies = board.companies.order_by('-last_updated') .annotate(replies=Count('reviews'))
    return render(request, 'companies.html', {'board': board, 'companies': companies})

def company_reviews(request, pk, company_pk):
    company = get_object_or_404(Company, board__pk=pk, pk=company_pk)
    company.views += 1
    company.save()
    return render(request, 'company_reviews.html', {'company': company})

사용자는 회사에 대한 리뷰를 게시하고 리뷰 양식에는 많은 기준이 있습니다.

각 리뷰 게시물에 표시되는 리뷰 게시물에 대한 전체 등급을 얻기 위해 몇 가지 기준을 함께 평균화하고 싶습니다.

그런 다음 회사의 모든 전체 등급을 평균하고 회사의 리뷰 페이지와 회사 목록 페이지에 표시합니다.

그런 다음 각 개별 기준의 총 평균을 찾아 전체 등급 아래의 회사 리뷰 페이지에 표시합니다 (치료 평균, 응답 속도 평균 등).

미리 감사드립니다!

OzzyTheGiant

F 표현식을 사용하고 집계를 주석과 결합 해보십시오.

# Annotate with average of multiple rating columns, 
# then aggregate all overall ratings and each individual rating of all reviews
Company.objects.annotate(overall_rating = Avg(
    F('move_in_condition') + 
    F('treatment') + 
    F('response_speed') +
    F('maintenance_quality') / 4
)).aggregate(
    Avg('overall_rating'), 
    Avg('move_in_condition'),
    Avg('treatment'),
    Avg('response_speed'),
    Avg('maintenance_quality')
)

이 전체 문은 지정한 세 가지 작업을 모두 수행합니다. output_field오류가 발생하는 경우 Avg 함수에 인수 를 지정해야 할 수 있습니다.

havent 한이 '이 테스트,하지만 난 워드 프로세서에서 직접 자신을 기반 : https://docs.djangoproject.com/en/2.2/ref/models/expressions/#f-expressions https://docs.djangoproject.com/en/2.2 / topics / db / aggregation / # aggregating-annotations

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

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

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

Django : 여러 등급 기준이있는 리뷰 사이트에 대한 등급 평균 생성

분류에서Dev

등급이 2 이상인 영화의 평균 등급을 찾기위한 Hive 쿼리

분류에서Dev

MySQL : 사용자에 대한 최신 등급을 사용하는 항목 당 평균 등급

분류에서Dev

SQL을 사용하여 평균 등급을 얻는 방법

분류에서Dev

Laravel 5에서 여러 등급 별 jquery 막대 등급 표시

분류에서Dev

jquery를 사용하여 laravel에서 평균 등급을 얻는 방법

분류에서Dev

등급을 부여한 다음 리뷰 또는 리뷰를 제공합니까?

분류에서Dev

낮은 등급에 대한 등급 계산기 방정식

분류에서Dev

배열 C ++를 사용하여 세 등급의 평균 계산

분류에서Dev

등급 시스템이 다른 등급에 적합한 패턴

분류에서Dev

룩업 테이블을 통해 값이 결정되는 숫자 등급과 문자 등급의 혼합에서 평균 등급을 계산하는 방법

분류에서Dev

네 가지 속성이있는 5 성급 등급 시스템

분류에서Dev

SQL 데이터베이스 조사 데이터의 평균 등급

분류에서Dev

프로덕션 등급 프로젝트에서 Python 라이브러리 PyGithub의 유용성

분류에서Dev

Excel : 이중 등급 컬러 스케일

분류에서Dev

평균 남성과 여성을위한 급여 만 분리

분류에서Dev

등급이있는 주제에 대한 스키마 디자인

분류에서Dev

시간 복잡도 기능에 대한 효율성 등급 입증

분류에서Dev

여러 등급 선택에 따라 전체 등급 계산

분류에서Dev

5 성급 등급 시스템 데이터베이스 설계

분류에서Dev

이전 등급을 기반으로 순차적 순위 생성

분류에서Dev

Exif 라이브러리에서 이미지 파일 등급을 얻는 방법

분류에서Dev

CSV 파일에서 R의 각 영화에 대한 평균 등급을 계산하는 방법은 무엇입니까?

분류에서Dev

Microsoft Excel 등급 시스템 백분율 및 평균에 대한 정수 교환 방법

분류에서Dev

등급 앱에 대해 들여 쓰기 된 선택 케이스 통계

분류에서Dev

등급 막대 목록에서 선택 / 클릭 한 등급 막대 위치를 얻는 방법

분류에서Dev

Naive Bayes-등급 레이블 1에 대한 샘플 없음

분류에서Dev

두 등급에 대한 관심의 분리

분류에서Dev

품질 게이트에 기반한 Sonarqube Sqale 등급

Related 관련 기사

  1. 1

    Django : 여러 등급 기준이있는 리뷰 사이트에 대한 등급 평균 생성

  2. 2

    등급이 2 이상인 영화의 평균 등급을 찾기위한 Hive 쿼리

  3. 3

    MySQL : 사용자에 대한 최신 등급을 사용하는 항목 당 평균 등급

  4. 4

    SQL을 사용하여 평균 등급을 얻는 방법

  5. 5

    Laravel 5에서 여러 등급 별 jquery 막대 등급 표시

  6. 6

    jquery를 사용하여 laravel에서 평균 등급을 얻는 방법

  7. 7

    등급을 부여한 다음 리뷰 또는 리뷰를 제공합니까?

  8. 8

    낮은 등급에 대한 등급 계산기 방정식

  9. 9

    배열 C ++를 사용하여 세 등급의 평균 계산

  10. 10

    등급 시스템이 다른 등급에 적합한 패턴

  11. 11

    룩업 테이블을 통해 값이 결정되는 숫자 등급과 문자 등급의 혼합에서 평균 등급을 계산하는 방법

  12. 12

    네 가지 속성이있는 5 성급 등급 시스템

  13. 13

    SQL 데이터베이스 조사 데이터의 평균 등급

  14. 14

    프로덕션 등급 프로젝트에서 Python 라이브러리 PyGithub의 유용성

  15. 15

    Excel : 이중 등급 컬러 스케일

  16. 16

    평균 남성과 여성을위한 급여 만 분리

  17. 17

    등급이있는 주제에 대한 스키마 디자인

  18. 18

    시간 복잡도 기능에 대한 효율성 등급 입증

  19. 19

    여러 등급 선택에 따라 전체 등급 계산

  20. 20

    5 성급 등급 시스템 데이터베이스 설계

  21. 21

    이전 등급을 기반으로 순차적 순위 생성

  22. 22

    Exif 라이브러리에서 이미지 파일 등급을 얻는 방법

  23. 23

    CSV 파일에서 R의 각 영화에 대한 평균 등급을 계산하는 방법은 무엇입니까?

  24. 24

    Microsoft Excel 등급 시스템 백분율 및 평균에 대한 정수 교환 방법

  25. 25

    등급 앱에 대해 들여 쓰기 된 선택 케이스 통계

  26. 26

    등급 막대 목록에서 선택 / 클릭 한 등급 막대 위치를 얻는 방법

  27. 27

    Naive Bayes-등급 레이블 1에 대한 샘플 없음

  28. 28

    두 등급에 대한 관심의 분리

  29. 29

    품질 게이트에 기반한 Sonarqube Sqale 등급

뜨겁다태그

보관