我是django,javascript,jquery,css等的新手。在Internet上的一个项目中,我看到了以下代码,我试图找到该项目的最新情况,但是我无法理解views.py中的ordered_by("?")
有什么帮助。
更多信息:该项目是有关营销站点的,该站点的主页将显示数据库中的内容。
tnx
urls.py:
path('', product.views.home),
models.py:
class Product(models.Model):
name = models.CharField(max_length=70, verbose_name='نام ')
subtitle = models.CharField(max_length=70, null=True, blank=True, verbose_name='عنوان فرعی ')
code = models.CharField(max_length=30, null=True, blank=True, verbose_name='کد محصول')
father = models.ForeignKey("self", related_name="children", null=True, blank=True, on_delete=models.CASCADE,
verbose_name="پدر")
have_children = models.BooleanField(default=False, verbose_name="فروش به صورت فصلی")
og_description = models.CharField(max_length=250, null=True, blank=True)
company = models.ForeignKey(Company, verbose_name='شرکت ', null=True, blank=True,
related_name='products', on_delete=models.CASCADE)
price = models.IntegerField(default=0, null=True, blank=True, verbose_name='قیمت به ریال')
# grade = models.ForeignKey(Grade, related_name='products', null=True, blank=True, verbose_name='پایه تحصیلی')
brochure = models.ImageField(upload_to='brochure', null=True, blank=True, verbose_name='بروشور')
photo_id = models.CharField(max_length=100, null=True, blank=True, verbose_name='آی دی تلگرام عکس')
video_id = models.CharField(max_length=100, null=True, blank=True, verbose_name='آی دی تلگرام ویدئو')
video = models.FileField(upload_to='videos', null=True, blank=True, verbose_name='دموی ویدیویی')
introduction = models.TextField(null=True, blank=True, verbose_name='معرفی اولیه')
thumbnail = models.ImageField(upload_to='thumbnail', null=True, blank=True, verbose_name='تامب نیل')
link = models.URLField(max_length=300, null=True, blank=True, validators=[URLValidator()],
verbose_name='آدرس فروش در وب سایت')
label_1 = models.CharField(max_length=30, null=True, blank=True)
label_2 = models.CharField(max_length=30, null=True, blank=True)
physical = models.BooleanField(default=False, verbose_name="محصول فیزیکی")
includes_discount_code = models.BooleanField(default=False, verbose_name="شامل کد تخفیف")
includes_download_file = models.BooleanField(default=False, verbose_name="شامل فایل برای دانلود")
like_count = models.PositiveIntegerField(null=True, blank=True, verbose_name='تعداد لایک')
average_score = models.FloatField(null=True, blank=True, verbose_name="میانگین امتیاز")
buy_count = models.PositiveIntegerField(null=True, blank=True, verbose_name="تعداد فروش")
buy_help_text = models.TextField(blank=True, null=True, verbose_name="راهنمای خرید")
use_help_text = models.TextField(blank=True, null=True, verbose_name="راهنمای استفاده")
promote_text = models.TextField(blank=True, null=True, verbose_name="معرفی مفصل")
limit_buy = models.PositiveIntegerField(default=1, verbose_name="محدودیت خرید")
# data = JSONField(null=True, blank=True, verbose_name="مشخصات")
available = models.BooleanField(default=True, verbose_name="قابل استفاده")
serializers.py:
class MiniProductSerializers(serializers.ModelSerializer):
class Meta:
model = Product
fields = (
"have_children",
"thumbnail",
"limit_buy",
"subtitle",
"brochure",
"price",
"name",
"id",
)
views.py:
def home(request):
ref = request.GET.get("ref")
if ref:
ReferenceLink.objects.create(page_name="اصلی", reference=ref)
return render(request, 'home/home.html', {
'company_list': MiniCompanySerializers(Company.objects.all(), many=True).data,
'cat_1': MiniProductSerializers(Product.objs.filter(productcategory__category__father_id=1).order_by("?")[:10], many=True).data,
'cat_2': MiniProductSerializers(Product.objs.filter(productcategory__category__father_id=2).order_by("?")[:10], many=True).data,
'cat_3': MiniProductSerializers(Product.objs.filter(productcategory__category__father_id=3).order_by("?")[:10], many=True).data,
'cat_4': MiniProductSerializers(Product.objs.filter(productcategory__category__father_id=4).order_by("?")[:10], many=True).data,
'cat_5': MiniProductSerializers(Product.objs.filter(productcategory__category__father_id=5).order_by("?")[:10], many=True).data,
'blog_posts': MiniPostSerializers(Post.objects.filter(home_page__exact=True), many=True).data,
})
答案 0 :(得分:0)
ordered_by("?")
-仅从集合中选择随机项目。请记住,此语句可能会花费很长的时间来计算,有时不是最好。看看docs:
注意:order_by('?')查询可能昂贵且缓慢,具体取决于 您正在使用的数据库后端。
答案 1 :(得分:0)
请参阅Django官方文档: https://docs.djangoproject.com/en/2.1/ref/models/querysets/#order-by
ModelName.objects.all().order_by('id')
这将返回按id值升序排列的查询集。
ModelName.objects.all().order_by('-id')
这将返回按ID值降序排列的查询集。
ModelName.objects.all().order_by('?')
要随机订购,请使用“?”,order_by('?')查询可能昂贵且缓慢,具体取决于您所使用的数据库后端。