在Django和PostgreSQL中获取随机查询集

时间:2015-03-05 10:16:09

标签: django postgresql random django-queryset

我正在建立一个网站,我想让用户先做出愿望,然后选择其他人的愿望并勾画它。

当用户来到他必须选择愿望的部分时,我想给他一个选择,从三个愿望中选择。为了使基本随机方法有效并确保首先要求的愿望获得更好的机会,这就是我想要做的:

从数据库中获取具有所需属性(is_live=Truelocked=False)的前10个愿望,然后使用order_by['?']随机化订单。然后我只想显示这10个人的前三个愿望。

这是我的代码:

形式:

class GetWishForm(forms.ModelForm):
wish = forms.ModelChoiceField(queryset='', initial=0)

def __init__(self, *args, **kwargs):
    self.request = kwargs.pop("request")
    super(GetWishForm, self).__init__(*args, **kwargs)
    query1 = Wish.objects.exclude(wisher=self.request.user).filter(pk__in=Wish.objects.filter(is_live=True, locked=False)[:10].values_list('pk')).order_by('?')
    self.fields["wish"].queryset = query1

class Meta:
    model = Sketch
    fields = ('wish',)
来自Views的

片段:

elif 'submit_get_wish' in which_submit:
        get_wish_form = GetWishForm(request.POST, request=request)

        if get_wish_form.is_valid():
            to_sketch = get_wish_form.save(commit=False)
            to_sketch.sketcher = request.user
            to_sketch.save()
            Wish.objects.filter(pk=request.POST['wish']).update(locked=True, sketcher=request.user)

            curr_user = UserProfile.objects.get(user=request.user)
            curr_user.progress = 3
            curr_user.save()

            return HttpResponseRedirect(reverse('start'))

        else:
            print get_wish_form.errors
            messages.error(request, 'Error, try again', fail_silently=True)
            return HttpResponseRedirect(reverse('start'))

正如您将看到的,我正在获得随机订购的10个最高要求。如何从该查询集中获取三个?

我尝试过切片但是当用户提交时我收到错误。

我还希望用户只获得一次生成的三个愿望,而不是刷新并获得三个新的随机愿望。击败了给他一个选择的目的。但这可以在以后完成。

0 个答案:

没有答案