2017-01-13 7 views
0

Как фильтровать содержимое выпадающего поля в страницах администратора django при редактировании объекта? Пример:Фильтр django admin много в один редактор

class Question(models.Model): 
    creator = models.ForeignKey(User) 
    body = models.CharField(max_length=200) 
    category = models.ForeignKey(Category) 

class Category(models.Model): 
    name = models.CharField(max_length=200) 
    creator = models.ForeignKey(User) 

class QuestionAdmin(TeacherModelAdmin): 
    fieldsets = [ 
     (None, {'fields': ['body', 'category']}), 
    ] 
    #Filter by request.user == creator ? 
+0

Эй, @Rokner, пожалуйста, напишите комментарий, если ответы не соответствуют вашим ожиданиям или не примут наиболее удовлетворительные. – glowka

ответ

0

Вы можете переопределить метод formfield_for_foreignkey в админ

class QuestionAdmin(TeacherModelAdmin): 
    def formfield_for_foreignkey(self, db_field, request, **kwargs): 
    if db_field.name == "category": 
     kwargs["queryset"] = Category.objects.filter(creater=request.user) 
    return super(QuestionAdmin, self).formfield_for_foreignkey(db_field, request, **kwargs) 
0

Похоже, что нет никакого официального способ сделать это.

Вы можете использовать крючок get_field_queryset, который определен в BaseModelAdmin и унаследован ModelAdmin. Решение будет выглядеть следующим образом:

class QuestionAdmin(TeacherModelAdmin): 
    fieldsets = [ 
     (None, {'fields': ['body', 'category']}), 
    ] 

    def get_field_queryset(self, db, db_field, request): 
     # Bahaviour for your field 
     if db_field.name == 'category': 
      return db_field.remote_field.model.filter(creator=request.user) 
     # Default behaviour unchanged 
     return super(OrderAdmin,self).get_field_queryset(db, db_field, request) 

Перед применением этого решения, пожалуйста, подумайте дважды, если вам это действительно нужно, не будучи частью официального API означает, что вы можете попасть в беду, когда кто-то изменяет этот крючок без добавления предупреждения устаревания заранее ,

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