Использование функции обновления набора запросов django с пользовательским ключом - PullRequest
0 голосов
/ 18 августа 2011

В итоге: у меня есть таблица mysql db, которая содержит объекты pdf.Когда пользователь печатает один из них, я хочу, чтобы таблица обновлялась с указанием времени, даты, напечатанного логического значения и пользователя, который напечатал объект pdf.Эта информация о пользователе должна записать значение для пользователя, который в данный момент вошел в систему. У меня есть все эти данные, которые в настоящее время обновляются, когда печатается PDF, за исключением пользователя.Я пытался использовать request.user, но он не работает в наборе запросов, иначе я что-то упустил.Я также попытался использовать методологию, аналогичную той, что я определила get_user, которая позволяет вручную устанавливать пользователя, но опять же, это не входит в набор запросов для автоматического обновления.Любая помощь высоко ценится!Мой файл admin.py выглядит следующим образом:

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)

1 Ответ

2 голосов
/ 18 августа 2011

Почему бы просто не передать 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)
...