Найти - Пользователи
Полная версия: Работа с моделями для Админки
Начало » Django » Работа с моделями для Админки
1 2
pavel_by
Вопрос следующий, есть модель которая нужна для сохранения партии шахматного турнира, но я хочу еще при нажатии на 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')

подскажите как решить данную проблему
Antonio051
Через сигналы post_save
https://docs.djangoproject.com/en/1.4/ref/signals/
pavel_by
Спасибо
Antonio051
post_save

а можно пример написать, что-то я не могу понять как его перехватить в моем коде
Antonio051
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)
pavel_by
Здорово, спасибо большое, а вот еще вопрос как проверить что пришло из поста и как его в этой функции отловить и сделать действия, здесь я его получаю из стандартной админки джанго, потому что я понимаю что я в этой функции вижу только работу с полями модели, а как например полученый из поста параметр присвоить в elo.
Antonio051
Не понял.
Какой параметр вы хотите присвоить в elo?
Его нет в instance?
pavel_by
сорри, а результат из поста должен быть в instance? то ессть по нажатию в админке на save я его должен получить в instance?
Antonio051
instance это тот объект который вы добавили.
Какой параметр из пОста вы хотите вытащить?
pavel_by
в данном случае winner и результат который получу прибавить одному из players
pavel_by
Вроде разобрался как выловить POST, теперь другой вопрос, как выбрать отсюда список players, если я получил request.POST <QueryDict: {u'players': , u'csrfmiddlewaretoken': , u'winner': , u'_save': }>. Про попытке выбрать через цикл или как с срез массива то возвращает один элемент. Подскажите как решить данную проблему
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