Уведомления

Группа в Telegram: @pythonsu
  • Начало
  • » Django
  • » Связь нескольких таблиц в админке через ForeignKey [RSS Feed]

#1 Дек. 16, 2009 18:33:27

well
От:
Зарегистрирован: 2006-11-20
Сообщения: 163
Репутация: +  0  -
Профиль   Отправить e-mail  

Связь нескольких таблиц в админке через ForeignKey

Всем привет! Не подскажете, как такое реализовать:
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' - знаю, что так нельзя, просто для наглядности.



Офлайн

#2 Дек. 17, 2009 07:11:43

sairus
От:
Зарегистрирован: 2007-10-08
Сообщения: 24
Репутация: +  0  -
Профиль   Отправить e-mail  

Связь нескольких таблиц в админке через ForeignKey

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 также использует текущую модель, поэтому пока нельзя (может и ошибаюсь). В будущих версиях можно будет писать собственные фильтры.



Офлайн

#3 Дек. 17, 2009 09:57:16

well
От:
Зарегистрирован: 2006-11-20
Сообщения: 163
Репутация: +  0  -
Профиль   Отправить e-mail  

Связь нескольких таблиц в админке через ForeignKey

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 также использует текущую модель, поэтому пока нельзя (может и ошибаюсь). В будущих версиях можно будет писать собственные фильтры.
Понял - не дергаюсь :).



Офлайн

#4 Дек. 18, 2009 18:50:09

sairus
От:
Зарегистрирован: 2007-10-08
Сообщения: 24
Репутация: +  0  -
Профиль   Отправить e-mail  

Связь нескольких таблиц в админке через ForeignKey

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”



Офлайн

#5 Дек. 21, 2009 09:44:38

well
От:
Зарегистрирован: 2006-11-20
Сообщения: 163
Репутация: +  0  -
Профиль   Отправить e-mail  

Связь нескольких таблиц в админке через ForeignKey

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”
Спасибо - прикрутил, действительно, приятнее :)



Офлайн

  • Начало
  • » Django
  • » Связь нескольких таблиц в админке через ForeignKey[RSS Feed]

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version