【问题标题】:in below code what does ordered_by("?") do?在下面的代码中,ordered_by("?") 做什么?
【发布时间】:2019-06-24 02:28:32
【问题描述】:

我是 django 、 javascripts 、 jquery 、 css 等的新手。在互联网上的一个项目中,我看到了以下代码,我试图找到这个项目发生了什么,但我不明白ordered_by("?")in views.py 有什么帮助? 更多信息:这个项目是关于营销网站,在主页将显示来自数据库的内容。 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,
    })

【问题讨论】:

    标签: jquery django django-rest-framework


    【解决方案1】:

    请查看 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('?') 查询可能会很昂贵且速度很慢,具体取决于您使用的数据库后端。

    【讨论】:

    • tnx 非常好用。
    【解决方案2】:

    ordered_by("?") - 只是从集合中选择随机项目。请记住,此语句可能需要很长时间来计算,有时不是最好的。看看docs

    注意:order_by('?') 查询可能既昂贵又缓慢,具体取决于 您正在使用的数据库后端。

    【讨论】:

    • tnx 非常好用。
    猜你喜欢
    • 1970-01-01
    • 2016-02-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-15
    • 2016-05-01
    相关资源
    最近更新 更多