2009-03-11 7 views
0

Я использую Django admin для управления моими данными. У меня есть таблицы пользователей, групп и доменов Таблица пользователей имеет много разных отношений с группами и доменами. Таблица доменов имеет отношение друг к другу с таблицей групп. , и когда я сохраняю данные пользователя через администратора, мне также нужны некоторые дополнительные обновления базы данных в таблице users_group и users_domains. Как это сделать? Где я могу поместить код. Спасибо.Django Admin

ответ

2

Я думаю, что вы ищете InlineModels. Они позволяют редактировать связанные модели на той же странице, что и родительская модель. Если вы ищете больше контроля, чем это, вы можете переопределить ModelAdmin save methods.

Кроме того, всегда проверяйте Manual, когда вам что-то нужно. Это действительно неплохо.

+0

Paolo: Похоже, мне нужно переопределить метод сохранения. Как я уже говорил, мне нужно обновить пару таблиц базы данных ... и дать возможность остальным операциям выполнять как обычно. Как это сделать. Спасибо – 2009-03-11 20:41:24

+0

Посмотрите в примере в документации. Просто определите функцию с именем save_model в классе AdminModel и сделайте то, что вам нужно. –

+0

Я просто играл с save_model. Похоже, что все выполненные здесь инструкции выполняются и выполняется операция сохранения, даже если я не вызываю явно()(). Это правильное поведение. Я не могу найти дальнейшую документацию на веб-сайте django. Благодарю. – 2009-03-11 21:05:10

0

Лучший способ обновления других таблиц базы данных - выполнить необходимые операции получения и сохранения. Однако, если у вас есть отношение «многие ко многим», по умолчанию обе стороны отношения доступны из параметра _set. То есть user.group_set.all() предоставит вам все объекты Group, связанные с пользователем, в то время как group.user_set.all() предоставит вам все объекты пользователя, связанные с группой. Так что, если вы переопределить метод сохранения (или регистрации сигнала слушателя - какой бы вариант звучит стилистически более приятным), попробуйте:

for group in user.group_set.all(): 
    #play with group object 
    .... 
    group.save()