Администратор Django - как переопределить стандартное представление <select>для внешнего ключа? - PullRequest
1 голос
/ 27 января 2010

У меня есть 2 модели Джанго

class Location
  address = models.CharField(max_length=100)
  city = models.CharField(max_length=20)

class Client
  location = models.ForeignKey(Location)
  name = models.CharField(max_length=100)

И у меня есть следующий admin.py

class ClientAdmin(admin.ModelAdmin):
fieldsets = [
    ('Client Details', {'fields': ['name']}),
    ('Location Details', {'fields': ['location']}),
]


admin.site.register(Client, ClientAdmin)

Когда я пытаюсь добавить Клиента, мне нравится иметь редактируемые поля «местоположения», то есть поля адреса и города. django по умолчанию дает список .. как я могу получить поля из таблиц foregin?

Как я могу это сделать? Я не хочу регистрировать таблицу Location в админке.

спасибо

1 Ответ

2 голосов
/ 04 января 2011

Вы можете поместить встроенную таблицу для местоположения и использовать набор запросов метода для обработки значений поля.Итак, это идея решения:

class LocationInline(admin.StackedInline):
    model = Location

    def queryset(self, request):
        query = ... #your custom query here
        qs = super(LocationInline, self).queryset(request).filter(query)
        return qs


class ClientAdmin(admin.ModelAdmin):
    inlines = [LocationInline]
    fieldsets = [
        ('Client Details', {'fields': ['name']}),
    ]

Редактировать: Есть еще один способ сделать это в Django 1.1.здесь: http://docs.djangoproject.com/en/dev/ref/contrib/admin/#django.contrib.admin.ModelAdmin.formfield_for_foreignkey

Это старый вопрос, но ответ на него может помочь и многим другим людям.Надеюсь, это поможет!;)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...