2010-04-08 58 views
-1

我的視圖中有一個django查詢集,其值在傳遞到我的模板之前打包。查詢集返回none時出現問題,因爲關聯值未解包。 quersyet被稱爲comments匹配django queryset中可選字段的空白條目以及相應的字段在必填字段中

這裏是我的views.py

def forums(request): 


post_list = list(forum.objects.filter(child='0')&forum.objects.filter(deleted='0').order_by('postDate')) 
user = UserProfile.objects.get(pk=request.session['_auth_user_id']) 
newpostform = PostForm(request.POST) 
deletepostform = PostDeleteForm(request.POST) 
DelPostFormSet = modelformset_factory(forum, exclude=('child','postSubject','postBody','postPoster','postDate','childParentId')) 
readform = ReadForumForm(request.POST) 
comments =list(forum.objects.filter(deleted='0').filter(child='1').order_by('childParentId').values('childParentId').annotate(y=Count('childParentId'))) 


if request.user.is_staff== True : 
    staff = 1 
else: 
    staff = 0 
staffis = 1 




if newpostform.is_valid(): 
    topic = request.POST['postSubject'] 
    poster = request.POST['postPoster'] 
    newpostform.save() 
    return HttpResponseRedirect('/forums') 

else: 
    newpostform = PostForm(initial = {'postPoster':user.id}) 

if request.GET: 
    form = SearchForm(request.GET) 
    if form.is_valid(): 
     query = form.cleaned_data['query'] 
     post_list = list((forum.objects.filter(child='0')&forum.objects.filter(deleted='0')&forum.objects.filter(Q(postSubject__icontains=query)|Q(postBody__icontains=query)|Q(postDate__icontains=query)))or(forum.objects.filter(deleted='0')&forum.objects.filter(Q(postSubject__icontains=query)|Q(postBody__icontains=query)|Q(postDate__icontains=query)).values('childParentId'))) 

if request.method == 'POST': 
    delpostformset = DelPostFormSet(request.POST) 
    if delpostformset.is_valid(): 
     delpostformset.save() 
     return HttpResponseRedirect('/forums') 

else: 
    delpostformset = DelPostFormSet(queryset=forum.objects.filter(child='0', deleted='0')) 



"""if readform.is_valid(): 
    user=get_object_or_404(UserProfile.objects.all()) 
    readform.save() 
else: 
    readform = ReadForumForm()""" 

post= zip(post_list,comments, delpostformset.forms) 
paginator = Paginator(post, 10) # Show 10 contacts per page 

# Make sure page request is an int. If not, deliver first page. 
try: 
    page = int(request.GET.get('page', '1')) 
except ValueError: 
    page = 1 

# If page request (9999) is out of range, deliver last page of results. 
try: 
    post = paginator.page(page) 
except (EmptyPage, InvalidPage): 
    post = paginator.page(paginator.num_pages) 

return render_to_response('forum.html', {'post':post, 'newpostform': newpostform,'delpost':delpostformset, 'username':user.username, 'comments':comments, 'user':user, },context_instance = RequestContext(request)) 

我意識到,這個問題是與comments查詢集comments =list(forum.objects.filter(deleted='0').filter(child='1').order_by('childParentId').values('childParentId').annotate(y=Count('childParentId')))這將只對有意見的帖子返回值。所以我現在需要一種方式來返回0評論當post-listpost_list = list(forum.objects.filter(child='0')&forum.objects.filter(deleted='0').order_by('postDate'))中的值沒有任何評論(可選字段)。

這裏是我的models.py

class forum(models.Model): 
    postID = models.AutoField(primary_key=True) 
    postSubject = models.CharField(max_length=100) 
    postBody = models.TextField() 
    postPoster = models.ForeignKey(UserProfile) 
    postDate = models.DateTimeField(auto_now_add=True) 
    child = models.BooleanField() 
    childParentId = models.ForeignKey('self',blank=True, null=True) 
    deleted = models.BooleanField() 

    def __unicode__(self): 
     return u' %d' % (self.postID) 

回答

3

你可能只是這樣做:

comments = list(queryset or []) 

如果查詢集解析爲無,那麼將使用空列表和comments將只是一個空的清單。

+0

這仍然不適用於'post_list = list(forum.objects.filter(child ='0')&forum.objects.filter(deleted ='0')。order_by('postDate'))' – 2010-04-09 07:49:03

0

我不認爲你做得對。我不相信queryset可以返回None。爲什麼不鏈接filter方法?

list(forum.objects.filter(child='0').filter(deleted='0').order_by('postDate')) 

如果你有更復雜的查詢,你可以使用Django的Query objects,它允許您使用&|邏輯運算符。

+0

是的,它不會返回任何內容。問題在於我正在壓縮兩個查詢中的值,'post-list'和'comments',因此它們需要在數量上相等,但是'comments'只會在'post-list'中的值有註釋時返回值。所以如何補償這樣的問題,即如果'post-list'沒有評論,我總是會在評論中得到'0'。 – 2010-04-12 07:51:21

+0

'zip'不需要兩個列表具有相同的長度。請詳細解釋** **和**簡明**你的問題是什麼,我相信會找到一個解決方案。 – 2010-04-12 09:25:37

+0

Olivier,我的問題是使用'comments'查詢。我需要它爲每個不同的'postID'獲取'childParentId'的數量。 'childParentId'用於表示具有特定'postId'的帖子的評論,因此2對於帖子及其評論類似。到目前爲止,我的代碼適用於有評論的帖子,但是將所有未評論的帖子作爲1帖子(因爲所有未評論帖子的'childParentId'是'None' – 2010-04-13 21:44:09