Ich verwende Django 1.4 und habe ein Many2many-Feld. Beim Erstellen der Admin-Site wollte ich dieses Feld als Inline hinzufügen.
class SummaryInline(admin.TabularInline):
model = ParserError.summaries.through
class MyClassAdmin(admin.ModelAdmin):
list_display = ('classifier', 'name', 'err_count', 'supported')
fields = ('classifier', 'name', 'err_count', 'err_classifier', 'supported')
inlines = (SummaryInline,)
readonly_fields = ('classifier', 'err_count')
Meine Frage ist also, wie kann ich das Inline-Feld schreibgeschützt machen?
Nach einer Weile versuchte ich den Namen zu finden, ich fand dank diese Antwort heraus, also überprüfte ich die Namen bei self.opts.local_fields
und fand den Namen der mittleren Tabelle und fügte ihn zu readonly_fields
, Einstellung can_delete
hinzu. zu falsch.
class SummaryInline(admin.TabularInline):
model = ParserError.summaries.through
readonly_fields = ('myclasssummary',)
can_delete = False
ziemlich einfach, aber es dauerte eine Weile, also stellte ich fest, dass es eine gute Idee war, es hier hinzuzufügen.
Wenn Sie nicht möchten, dass Zeilen hinzugefügt oder gelöscht werden können, können Sie diese Definitionen hinzufügen.
def has_add_permission(self, request, obj=None):
return False
def has_delete_permission(self, request, obj=None):
return False
Danke, Keval Prabhu
class UnitsInline(admin.TabularInline):
model = Units
extra = 0
verbose_name = 'Units'
verbose_name_plural = 'Units of company'
**def has_add_permission(self, request, obj=None):
return False
def has_delete_permission(self, request, obj=None):
return False**
Sie können die gesamte Zeile schreibgeschützt machen, indem Sie Folgendes hinzufügen:
class UnitsInline(admin.TabularInline):
def has_change_permission(self, request, obj=None):
return False
Dadurch wird verhindert, dass jemand den Eintrag vom Administrator bearbeitet