我正在建立一个网站,我想让用户先做出愿望,然后选择其他人的愿望并勾画它。
当用户来到他必须选择愿望的部分时,我想给他一个选择,从三个愿望中选择。为了使基本随机方法有效并确保首先要求的愿望获得更好的机会,这就是我想要做的:
从数据库中获取具有所需属性(is_live=True
和locked=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个最高要求。如何从该查询集中获取三个?
我尝试过切片但是当用户提交时我收到错误。
我还希望用户只获得一次生成的三个愿望,而不是刷新并获得三个新的随机愿望。击败了给他一个选择的目的。但这可以在以后完成。