Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
django brookie-';非类型';对象没有属性';状态';_Django_Django Admin - Fatal编程技术网

django brookie-';非类型';对象没有属性';状态';

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')

前几天偶然发现了Brookie应用程序,并四处看看。非常适合在保存时创建发票PDF

但是,我在创建新发票时遇到此错误。我知道出现错误是因为没有对象,因此它不能有属性

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')