Уведомления

Группа в Telegram: @pythonsu

#1 Дек. 12, 2012 00:18:52

pavel_by
Зарегистрирован: 2012-12-12
Сообщения: 7
Репутация: +  0  -
Профиль   Отправить e-mail  

Работа с моделями для Админки

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

модель участника

class Player(models.Model):
    fname = models.CharField(max_length = 50)
    lname = models.CharField(max_length = 50)
    elo = models.IntegerField(max_length = 10)
    def __unicode__(self):
        return '%s %s' % (self.fname, self.lname)

модель для регистрирования сыгранных партий
class Party(models.Model):
    players = models.ManyToManyField(Player, related_name = 'pl')
    winner = models.ForeignKey(Player, related_name = 'win')

подскажите как решить данную проблему

Офлайн

#2 Дек. 12, 2012 02:02:09

Antonio051
От:
Зарегистрирован: 2011-01-06
Сообщения: 31
Репутация: +  1  -
Профиль   Отправить e-mail  

Работа с моделями для Админки

Через сигналы post_save
https://docs.djangoproject.com/en/1.4/ref/signals/



Офлайн

#3 Дек. 12, 2012 03:26:03

pavel_by
Зарегистрирован: 2012-12-12
Сообщения: 7
Репутация: +  0  -
Профиль   Отправить e-mail  

Работа с моделями для Админки

Спасибо

Antonio051
post_save

а можно пример написать, что-то я не могу понять как его перехватить в моем коде

Отредактировано pavel_by (Дек. 12, 2012 03:55:40)

Офлайн

#4 Дек. 12, 2012 07:05:57

Antonio051
От:
Зарегистрирован: 2011-01-06
Сообщения: 31
Репутация: +  1  -
Профиль   Отправить e-mail  

Работа с моделями для Админки

from django.db.models.signals import post_save
def create_party(sender, instance, created, **kwargs):
    if created:
        players = instance.players.all()
        winner = instance.winner
        #Что-то делаете с players и сохраняете
        for player in players:
            player.fname = .......
            player.lname = .......
            player.elo = .......
            player.save()
        
        #Что-то делаете с winner и сохраняете
        winner.fname = .......
        winner.lname = .......
        winner.elo = .......
        winner.save()
post_save.connect(create_party, sender=Party)



Офлайн

#5 Дек. 12, 2012 23:20:01

pavel_by
Зарегистрирован: 2012-12-12
Сообщения: 7
Репутация: +  0  -
Профиль   Отправить e-mail  

Работа с моделями для Админки

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

Офлайн

#6 Дек. 13, 2012 02:21:51

Antonio051
От:
Зарегистрирован: 2011-01-06
Сообщения: 31
Репутация: +  1  -
Профиль   Отправить e-mail  

Работа с моделями для Админки

Не понял.
Какой параметр вы хотите присвоить в elo?
Его нет в instance?



Офлайн

#7 Дек. 13, 2012 02:28:22

pavel_by
Зарегистрирован: 2012-12-12
Сообщения: 7
Репутация: +  0  -
Профиль   Отправить e-mail  

Работа с моделями для Админки

сорри, а результат из поста должен быть в instance? то ессть по нажатию в админке на save я его должен получить в instance?

Офлайн

#8 Дек. 13, 2012 03:34:51

Antonio051
От:
Зарегистрирован: 2011-01-06
Сообщения: 31
Репутация: +  1  -
Профиль   Отправить e-mail  

Работа с моделями для Админки

instance это тот объект который вы добавили.
Какой параметр из пОста вы хотите вытащить?



Офлайн

#9 Дек. 13, 2012 10:59:14

pavel_by
Зарегистрирован: 2012-12-12
Сообщения: 7
Репутация: +  0  -
Профиль   Отправить e-mail  

Работа с моделями для Админки

в данном случае winner и результат который получу прибавить одному из players

Отредактировано pavel_by (Дек. 13, 2012 11:00:06)

Офлайн

#10 Дек. 15, 2012 02:58:01

pavel_by
Зарегистрирован: 2012-12-12
Сообщения: 7
Репутация: +  0  -
Профиль   Отправить e-mail  

Работа с моделями для Админки

Вроде разобрался как выловить POST, теперь другой вопрос, как выбрать отсюда список players, если я получил request.POST <QueryDict: {u'players': , u'csrfmiddlewaretoken': , u'winner': , u'_save': }>. Про попытке выбрать через цикл или как с срез массива то возвращает один элемент. Подскажите как решить данную проблему

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version