Найти - Пользователи
Полная версия: Связь нескольких таблиц в админке через ForeignKey
Начало » Django » Связь нескольких таблиц в админке через ForeignKey
1
well
Всем привет! Не подскажете, как такое реализовать:
models.py:
class Cars (models.Model):
car_numb = models.CharField(max_length=20, unique=True, verbose_name=u'Номер машины')
mirror_ign = models.NullBooleanField(null=True, verbose_name=u'Игнорировать наличия зеркала')
date_upd = models.DateTimeField (auto_now_add=True, verbose_name=u'Дата обновления инфы')

def __unicode__(self):
return "%s" % (self.car_numb)

class Details (models.Model):
car = models.ForeignKey(Cars, unique=True)
dr_name = models.CharField(max_length=20, verbose_name=u'Имя Водителя')
mirror = models.NullBooleanField(null=True, verbose_name = u'Наличие зеркала')
comments = models.CharField(blank=True, max_length=100, verbose_name=u'Комментарии')
date_upd = models.DateTimeField (auto_now_add=True, verbose_name=u'Дата обновления лога')
admin.py:
class DetailsAdmin(admin.ModelAdmin):
list_display = ('car', 'Cars.mirror_ign', 'dr_name', 'mirror', 'comments', 'date_upd',)
list_filter = ('Cars.mirror_ign', 'mirror',)
fieldsets = (('Основное',
{'fields': ('car',
'Cars.mirror_ign',
'dr_name',
'mirror',
'comments',)
}),)
search_fields = ['car__car_numb', 'dr_name',]


admin.site.register(Details , Details Admin)
Не знаю, как прописать поле mirror_ign из класса Cars (models.py) в элементы list_display, list_filter и fieldsets в admin.py. 'Cars.mirror_ign' - знаю, что так нельзя, просто для наглядности.
sairus
1. По поводу list_display = ('car', ‘Cars.mirror_ign’, ‘dr_name’, ‘mirror’, ‘comments’, ‘date_upd’,)

дополняете класс Details методом
def get_mirror_ign(self):
return self.car.mirror_ign

и вставляете его в list_display ('car', ‘get_mirror_ign’, ‘dr_name’, ‘mirror’, ‘comments’, ‘date_upd’,)

2. Для fieldsets в доках написано “Set fieldsets to control the layout of admin ”add“ and ”change“ pages”, то есть это для добавления и изменения данных модели, поэтому доступ к модели выше не возможен. Даже по соображению безопасности и здравого смысла.

3. list_filter также использует текущую модель, поэтому пока нельзя (может и ошибаюсь). В будущих версиях можно будет писать собственные фильтры.
well
sairus
1. По поводу list_display = ('car', ‘Cars.mirror_ign’, ‘dr_name’, ‘mirror’, ‘comments’, ‘date_upd’,)

дополняете класс Details методом
def get_mirror_ign(self):
return self.car.mirror_ign

и вставляете его в list_display ('car', ‘get_mirror_ign’, ‘dr_name’, ‘mirror’, ‘comments’, ‘date_upd’,)
Спасибо - заработало :)
sairus
2. Для fieldsets в доках написано “Set fieldsets to control the layout of admin ”add“ and ”change“ pages”, то есть это для добавления и изменения данных модели, поэтому доступ к модели выше не возможен. Даже по соображению безопасности и здравого смысла.
Жаль, думал, что можно менять значения и у “родительской” модели.
sairus
3. list_filter также использует текущую модель, поэтому пока нельзя (может и ошибаюсь). В будущих версиях можно будет писать собственные фильтры.
Понял - не дергаюсь :).
sairus
sairus
3. list_filter также использует текущую модель, поэтому пока нельзя (может и ошибаюсь). В будущих версиях можно будет писать собственные фильтры.
Сейчас копал свои исходники и нашел решение, совершенствуем метод

def get_mirror_ign(self):
return self.car.mirror_ign
get_mirror_ign.short_description = u“Игнор зеркала”
get_mirror_ign.admin_order_field = “car__mirror_ign”
well
sairus
sairus
3. list_filter также использует текущую модель, поэтому пока нельзя (может и ошибаюсь). В будущих версиях можно будет писать собственные фильтры.
Сейчас копал свои исходники и нашел решение, совершенствуем метод

def get_mirror_ign(self):
return self.car.mirror_ign
get_mirror_ign.short_description = u“Игнор зеркала”
get_mirror_ign.admin_order_field = “car__mirror_ign”
Спасибо - прикрутил, действительно, приятнее :)
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB