2010-10-19 12 views

Odpowiedz

132

Użyj Readonly Fields. Jak tak (dla Django> = 1.2):

class MyModelAdmin(admin.ModelAdmin): 
    readonly_fields=('first',) 
+3

+1. Zwłaszcza, jeśli nie planujesz edytować pola w Admin. –

12

Aktualizacja

To rozwiązanie jest przydatne, jeśli chcesz zachować pole edytowalne w admin, ale nie można edytować wszędzie indziej. Jeśli chcesz, aby pole nie podlegało edycji w całym numerze, to @ Till Backhaus 'answer jest lepszym rozwiązaniem.

oryginaÂłu odpowiedź

Jednym ze sposobów, aby to zrobić byłoby użyć niestandardowego ModelForm admin. Ten formularz może zastąpić wymagane pole, aby można go było edytować. Tym samym zachowujesz editable=False wszędzie poza administratorem. Dla np. (testowane z Django 1.2.3)

# models.py 
class FooModel(models.Model): 
    first = models.CharField(max_length = 255, editable = False) 
    second = models.CharField(max_length = 255) 

    def __unicode__(self): 
     return "{0} {1}".format(self.first, self.second) 

# admin.py 
class CustomFooForm(forms.ModelForm): 
    first = forms.CharField() 

    class Meta: 
     model = FooModel 
     fields = ('second',) 

class FooAdmin(admin.ModelAdmin): 
    form = CustomFooForm 

admin.site.register(FooModel, FooAdmin) 
+0

to nie działa, przynajmniej na Django 1.6 jest prawidłowo wyświetlany w panelu administratora formy, ale kiedy zapisać formularz i powrócić do niego ponownie, formularze wartość jest ponownie domyślna. – Euphorbium

Powiązane problemy