2013-08-03 9 views
3

У меня есть 2 модели: Продукт и категория. Когда я создаю новый продукт в своем интерфейсе администратора, мне нужно выбрать категорию в списке. Но я бы хотел заказать эти категории по названию в моем списке. После поиска в Интернете, я еще не нашел решение.Django Admin: заказ элементов в списке выбора

Есть ли способ сделать это?

+3

Почему downvotes? Я думаю, что это законный вопрос ... –

ответ

4

Вы можете установить порядок по умолчанию в мета класса вашего определения модели:

class Category(models.Model): 
    name = models.CharField(...) 
    [ other fields ... ] 
    class Meta: 
     ordering = ['name'] 

тем, что, любой запрос на категории будет отсортирован по умолчанию на поле имени. Это может быть недостатком, если ненужное упорядочение влияет на производительность в других представлениях/местоположениях вашего приложения. Кроме того, вы можете также изменить порядок внутри вашего admins.py. Основы для этого выглядят так. Вы должны будете адаптировать этот фрагмент кода для вашего конкретного приложения:

from django import forms 
from django.contrib import admin 
from my_project.my_app.models import Category, Product 

class ProductAdmin(admin.ModelAdmin): 
    def formfield_for_dbfield(self, db_field, **kwargs): 
     field = super(ProductAdmin, self).formfield_for_dbfield(db_field, **kwargs) 
     if db_field.name == 'category': 
      field.queryset = Category.objects.all().order_by('name') 
     return field 
    list_display = ('...', '...', ...) 
    [ other admin definitions ... ] 
admin.site.register(Product, ProductAdmin) 

Принятая ответ на этот вопрос SO добавляет еще одно решение: Django Admin: Ordering of ForeignKey and ManyToManyField relations referencing User

+0

Он работает! Большое спасибо ! возможно, я не понимал, как работает Meta. Теперь я знаю немного больше об этом :) Большое спасибо! – PinkPR

+0

Добро пожаловать :) Не забудьте принять ответ, если вам это нравится. –

Смежные вопросы