Django fix Admin w liczbie mnogiej

148

Jak zmienić nazwy niektórych modeli z „Kategorii” na „Kategorie” na stronie administratora w nowej wersji dev django? W starej wersji (bez witryn administracyjnych i modeli administracyjnych) można było to po prostu zrobić; http://www.the-dig.com/blog/post/customize-plural-name-django-admin/

Jednak - teraz ustawienie verbose_name_plural wewnątrz mojej klasy opartej na modeladmin nic nie robi. Czy ktoś napotyka ten sam problem?

Andriy Drozdyuk
źródło
U mnie działa w Django 1.1.1 ... Czy na pewno umieszczasz go w zagnieżdżonej klasie Meta?
rescdsk
tak, właśnie pomyślałem, że nowe wersje pozbyły się wewnętrznej klasy Meta wewnątrz modeli. Najwyraźniej nie - po prostu skomplikowali sprawę dzięki zajęciom dla administratorów ...
Andriy Drozdyuk,

Odpowiedzi:

274

Cóż, wygląda na to, że podejście klasy Meta nadal działa. Więc umieszczenie meta klasy wewnątrz modelu nadal zadziała:

class Category(models.Model):
    class Meta:
        verbose_name_plural = "categories"

Zwróć uwagę, że używamy tutaj małych liter, ponieważ django jest wystarczająco sprytne, aby używać wielkich liter, kiedy tego potrzebujemy.

Uważam, że ustawienie tej opcji w klasie modelu jest dziwne w przeciwieństwie do pliku admin.py. Oto lokalizacja w dokumentacji deweloperskiej, w której jest to opisane:
http://docs.djangoproject.com/en/dev/ref/models/options/#verbose-name-plural

Andriy Drozdyuk
źródło
20
Pomysł ustawienia tego w klasie modelu (zamiast admin.py) sprowadza się do DRY - tylko dlatego, że admin jest jedyną nieszablonową rzeczą, która używa tych informacji o twoim modelu, nie oznacza, że ​​zawsze będzie być. Miejmy nadzieję, że jeśli potrzebujesz nazwy modelu w liczbie mnogiej gdzieś we własnym kodzie, użyjesz tej właściwości zamiast wymyślać koło na nowo.
cibyr
11

w tym celu musisz dodać meta klasy dla modeli

class Category(models.Model):
    --- model field here ---
    class Meta: 
        verbose_name = "Category"
        verbose_name_plural = "Categories"

Bonus dla administratora twoich modeli w apps.py

class CategoryConfig(AppConfig):
    name = "Category"
    verbose_name = "Categories"
Saurabh Chandra Patel
źródło