У меня проблемы с тем, как вернуть ключ, и значения подсчитываются из моей таблицы работников БД, где каждый клиент дал оценку работникам. Я хочу вернуть рейтинг каждого работника. Мои модели БД, конечные точки, как показано ниже:
@classmethod
def distinct_rating_count(cls, _workerId):
return {'rating_count': [c[0] for c in
db.session.query
(func.count(distinct(RatingModel.rating)))
.filter_by(workerId=_workerId)
.group_by(RatingModel.rating)]}
класс RatingModel (db.Model):
__tablename__ = 'rating'
id = db.Column(db.Integer(), primary_key=True)
rating = db.Column(db.Integer(), nullable=False)
rateDate = db.Column(db.DateTime, default=datetime.datetime.utcnow)
comments = db.Column(db.String(512), nullable=True)
userId = db.Column(db.Integer(), db.ForeignKey('users.id'))
user = db.relationship('UserModel')
workerId = db.Column(db.Integer(), db.ForeignKey('workers.id'))
worker = db.relationship('WorkerModel')
def __init__(self, userId, workerId, rating, comments):
self.userId = userId
self.workerId = workerId
self.rating = rating
self.comments = comments
класс DistinctRatingCount (Resource):
def get(self, workerId):
ratingcount = RatingModel.distinct_rating_count(workerId)
if ratingcount:
return ratingcount
else:
return {'message': 'There is no rating yet'}
classmethod different_rating_count возвращает:
{"rating_count": [1, 1, 1]}
Однако я хочу что-то вроде словаря, если для некоторых работников нет значения рейтинга, например в приведенном ниже примере ни один работник с рейтингом «1» и «4» не должен быть помечен 0 раз:
{«1»: 0, «2»: 3, «3»: 5, "4": 0, "5": 2}
Я очень много пытался найти stackoverflow и погуглил его, я не смог получить правильную подсказку. заранее спасибо.
//////////////////////////////////////////// //////////////////////////////// наконец-то по методике @Shivendra Pratap Kushwaha с небольшими изменениями, я разобрался, как показано ниже :
@classmethod
def distinct_rating_count(cls, _workerId):
rating = dict(cls.query.with_entities
(RatingModel.rating, func.count(
RatingModel.rating))
.group_by(RatingModel.rating)
.filter_by(workerId=_workerId))
---------- {"1": 2, "4": 1, "5": 2}