2011-08-18 61 views
0

總結:我有一個保存pdf對象的mysql數據庫表。當用戶打印其中的一個時,我希望表格用時間,日期,打印的布爾值以及打印PDF對象的用戶進行更新。這個用戶信息應該爲當前登錄的用戶寫入值。當用戶打印PDF時,所有這些信息都會更新。我已經嘗試使用request.user,但似乎並沒有在查詢集中工作,否則我錯過了一些東西。我也嘗試使用類似於我已定義get_user的方法,該方法允許我手動設置用戶,但同樣不在queryset中自動更新。任何幫助深表感謝!我的admin.py文件如下:使用用戶foreignkey的django queryset更新功能

from django.contrib import admin 
from django.contrib.auth.models import User 
from djangostuff.pdf.models import ABC 
from django.http import HttpResponse 
import datetime, time 

class ABCAdmin(admin.ModelAdmin): 

    actions = ['print_selected_pdf'] 

    def get_user(self): 
     return '%s'%(self.user.username) 

    def create_pdf(self, queryset): 
     response = HttpResponse(mimetype="application/pdf") 
     response['Content-Disposition'] = 'attachment; filename=form.pdf' 
     for obj in queryset: 
      response.write(obj.form) 
      ABC.objects.filter(pk=obj.pk).update(pdf_printed="1",request_time=time.strftime("%H:%M:%S"),request_date=datetime.datetime.today()) 
      ABC.objects.filter(pk=obj.pk).update(user=request.user) 

     return response 


    def print_selected_pdf(self, request, queryset): 
     # prints the pdfs for those that are selected, 
     # regardless if the pdf_printed field is true or false 
     qs = queryset.filter(pdf_printed__exact=0) 
     return self.create_pdf(qs) 

    print_selected_pdf.short_description = "Print Selected PDF" 

    get_user.short_description='Printed By' 

    list_display=('form_no',get_user,'request_date','request_time','pdf_printed') 


admin.site.register(ABC, ABCAdmin) 

回答

2

爲什麼不只是傳遞request作爲參數傳遞給create_pdf

def create_pdf(self, request, queryset): 
    ... 

def print_selected_pdf(self, request, queryset): 
    qs = queryset.filter(pdf_printed__exact=0) 
    return self.create_pdf(request, qs) 
+0

我知道我只是忽略了一件事 - 就是這樣。非常感謝! – Joseph