2016-10-24 4 views
2

私のdjango-adminには、modelを編集できないようにしようとしています。'オプション'オブジェクトには 'get_all_field_names'属性がありません

したがって、overridingの方法get_readonly_fieldsadmin.ModelAdminです。

Here is my Code

@admin.register(SMSTemplate) 
class SMSTemplateAdmin(admin.ModelAdmin): 
    list_display=['title', 'json', 'note'] 
     formfield_overrides = { 
     JSONField: {'widget': PrettyJSONWidget } 
    } 

    def has_delete_permission(self, request, obj=None): 
     return False 

    def get_readonly_fields(self, request, obj=None): 
     return self.model._meta.get_all_field_names() 

しかし、私はエラーに直面しています。私はここにエラーを貼り付けています。

'Options' object has no attribute 'get_all_field_names' 

どのようなアイデアですか?

答えて

10

django 1.10を使用している可能性があります。このバージョンではget_all_field_nameswas deletedです。私はこのエラーになっていますget_fields

def get_readonly_fields(self, request, obj=None): 
    return [f.name for f in self.model._meta.get_fields()] 

または完全な互換性のあるバージョン

from itertools import chain 

def get_readonly_fields(self, request, obj=None): 
    return list(set(chain.from_iterable(
     (field.name, field.attname) if hasattr(field, 'attname') else (field.name,) 
     for field in self.model._meta.get_fields() 
     # For complete backwards compatibility, you may want to exclude 
     # GenericForeignKey from the results. 
     if not (field.many_to_one and field.related_model is None) 
    ))) 
+0

のために使用します - >タイプエラーを:はhasattr():属性名は、文字列 –

+0

@AdilMalikでなければなりませんあなたは私の答えをコピーまたは単にされています例として使用していますか?なぜなら、このコードはdocsから取得して動作するからです。この問題が発生した場所を教えてください。 –

+0

それはうまくいった。私は_metaが欠けていた –

関連する問題