Форум сайта python.su
Вопрос следующий, есть модель которая нужна для сохранения партии шахматного турнира, но я хочу еще при нажатии на 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')
Офлайн
Через сигналы post_save
https://docs.djangoproject.com/en/1.4/ref/signals/
Офлайн
Спасибо
Antonio051
post_save
Отредактировано pavel_by (Дек. 12, 2012 03:55:40)
Офлайн
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)
Офлайн
Здорово, спасибо большое, а вот еще вопрос как проверить что пришло из поста и как его в этой функции отловить и сделать действия, здесь я его получаю из стандартной админки джанго, потому что я понимаю что я в этой функции вижу только работу с полями модели, а как например полученый из поста параметр присвоить в elo.
Офлайн
Не понял.
Какой параметр вы хотите присвоить в elo?
Его нет в instance?
Офлайн
сорри, а результат из поста должен быть в instance? то ессть по нажатию в админке на save я его должен получить в instance?
Офлайн
instance это тот объект который вы добавили.
Какой параметр из пОста вы хотите вытащить?
Офлайн
в данном случае winner и результат который получу прибавить одному из players
Отредактировано pavel_by (Дек. 13, 2012 11:00:06)
Офлайн
Вроде разобрался как выловить POST, теперь другой вопрос, как выбрать отсюда список players, если я получил request.POST <QueryDict: {u'players': , u'csrfmiddlewaretoken': , u'winner': , u'_save': }>. Про попытке выбрать через цикл или как с срез массива то возвращает один элемент. Подскажите как решить данную проблему
Офлайн