django brookie-';非类型';对象没有属性';状态';
前几天偶然发现了Brookie应用程序,并四处看看。非常适合在保存时创建发票PDF 但是,我在创建新发票时遇到此错误。我知道出现错误是因为没有对象,因此它不能有属性django brookie-';非类型';对象没有属性';状态';,django,django-admin,Django,Django Admin,前几天偶然发现了Brookie应用程序,并四处看看。非常适合在保存时创建发票PDF 但是,我在创建新发票时遇到此错误。我知道出现错误是因为没有对象,因此它不能有属性 class InvoiceAdmin(admin.ModelAdmin): list_display = ('client', 'status', 'date', total_monetized, is_expired, pdf_invoice) list_filter = ('status', 'client')
class InvoiceAdmin(admin.ModelAdmin):
list_display = ('client', 'status', 'date', total_monetized, is_expired, pdf_invoice)
list_filter = ('status', 'client')
exclude = ('invoice_no',)
ordering = ('id', )
search_fields = ['client__company', ]
readonly_fields = ()
inlines = [ItemInline,]
class Media:
js = ('http://ajax.googleapis.com/ajax/libs/jquery/1.4.3/jquery.min.js', 'brookie/js/brookie.js')
def get_readonly_fields(self, request, obj=None):
readonly = super(InvoiceAdmin, self).get_readonly_fields(request, obj)
# if the invoice is send you can no longer alter it
if obj.status in br_settings.INVOICE_FINISH_STATUS:
readonly = ('invoice_id', 'client', 'date', 'currency', 'tax', 'hourly_rate')
return readonly
def save_model(self, request, obj, form, change):
obj.save()
if obj.status in br_settings.INVOICE_FINISH_STATUS:
# Set the invoice id
if not obj.invoice_no:
invoice_list = Invoice.objects.filter(invoice_no__isnull=False).order_by('-invoice_no')
try:
invoice = invoice_list[0]
except:
# There are no numbered invoices
invoice_no = getattr(br_settings, 'INVOICE_START_NUMBER', 1)
else:
invoice_no = invoice.invoice_no + 1
obj.invoice_no = invoice_no
obj.save()
# Generate the pdf for this invoice
context_dict = {'invoice': obj,
'client': obj.client,
'items': obj.items.all(),}
generate_pdf(obj.invoice_id, context_dict, "brookie/invoice_%s_pdf.html" % obj.currency, save=True)
在只读字段之前,我尝试了各种方法来测试对象的存在性。如果发票处于非开发状态(1),则返回只读字段
如果对象是新的,如何忽略get_readonly_fields函数?
我还尝试在模型中添加一个默认值=1,在尝试访问状态attibute之前测试obj是否存在
提前谢谢
##编辑##
问题是,即使在
obj
为None
的情况下,您也试图评估status
属性,这显然是可以接受的情况
要解决此问题,您可以更改以下内容:
# if the invoice is send you can no longer alter it
if obj.status in br_settings.INVOICE_FINISH_STATUS:
readonly = ('invoice_id', 'client', 'date', 'currency', 'tax', 'hourly_rate')
为此:
# if the invoice is send you can no longer alter it
if obj and obj.status in br_settings.INVOICE_FINISH_STATUS:
readonly = ('invoice_id', 'client', 'date', 'currency', 'tax', 'hourly_rate')
错误发生在哪里?提供完整的回溯总是有帮助的(首先使用“切换到复制和粘贴视图”)。谢谢,我正在尝试if obj:if obj.status:这不起作用。这就成功了
# if the invoice is send you can no longer alter it
if obj and obj.status in br_settings.INVOICE_FINISH_STATUS:
readonly = ('invoice_id', 'client', 'date', 'currency', 'tax', 'hourly_rate')