دو تا مدل دارم
مدل نظرات
class CommentModel(CommonModel):
game = models.ForeignKey(
GameModel,
on_delete=models.SET_NULL,
related_name="comment_game",
null=True)
rate = models.IntegerField(default=0, blank=True, null=True, verbose_name="امتیاز")و مدل بازی
class GameModel(TitleModel):
price = models.IntegerField(null=True, blank=True, default=0, verbose_name="price")
در مدل نظرات به بازی ها از 1 تا 5 امتیاز میدم.
چجوری بر اساس بیشترین امتیاز مرتب سازی کنم؟( که مثلا اگر میانگین امتیازات این بازی بیشتر بود بیاد اول لیست)؟
سلام از این استفاده کن ببین میشه
games = GameModel.objects.all().order_by("comment_game__rate")
یا
games = GameModel.objects.all().order_by("-comment_game__rate")سلام دوست من
جسارتا رابطه ی بین این دو جدول یک به چند هستش و این روش برای مرتب سازی بازی ها به وسیله ی امتیازشون صحیح نیست
برای این مورد ابتدا با استفاده از دستور annotate باید مقدار sum مربوط به rate رو به ازای هر آیتم بدست بیارین و بر اساس اون مرتب سازی رو انجام بدین
from django.db.models import sum
GameModel.objects.annotate(total_rate=Sum('commentmodel_set__rate')).orderby('total_rate')این دستور بهتون کمک میکنه ( دستور رو ذهنی نوشتم براتون شاید نیاز به تغییر داشته باشه )
ممنون بابت توضیحات و راهنمایی سریعتون استاد اردوخانی.
در قسمتی از توضیحات فرمویدید
رابطه ی بین این دو جدول یک به چند هستش و این روش برای مرتب سازی بازی ها به وسیله ی امتیازشون صحیح نیست
اگر امکانش هست راهنمایی میکنید برای ساختاری که بتونم مرتب سازی بر اساس امتیاز داشته باشم شما چه رابطه و چه کوئری رو توصیه میکنید؟
باتشکر فراوان
خواهش میکنم دوست من
منظورم رابطه اشتباه نبود دوست من
رابطه ای که ایجاد کردین کاملا صحیح هستش
کوئری که برای واکشی اطلاعات استفاده شده بود اشتباه بود که سعی کردم راهنماییتون کنم