Форум сайта python.su
Доброго всем дня!
Изучаю Django около недели. Столкнулся с такой задачей:
имеются 2 класса:
class Player(models.Model):
…………
class Game(models.Model):
player = models.ManyToManyField(Player)
…………
Необходимо ещё до сохранения объекта (Game) проверить, чтобы в ней было как минимум 5 связей с объектами (Player). Если их нет, то не сохранять объект.
Как проще и эффективнее это организовать?
Я пробовал переписать save().
def save(self, *args, **kwargs):
if self.player.count() < 5:
return
…….
super(Game, self).save(*args, **kwargs)
Но такая модель (что и правильно) не работает, так как сам объект ещё в базе отсутствует, и связей ещё нет. Как быть?
P.S.: Админку не переписывал, а в пакетах джанго формы редактировать вообще дурной тон.
Отредактировано Nabunon (Апрель 8, 2013 19:42:19)
Офлайн
А как данные будут вноситься в модель?
Офлайн
Через форму административного интерфейса.
Офлайн
С Django недавно, если не ошибаюсь то проверку можно организовать так:
def clean_player(self): if self.player.count() < 5: raise forms.ValidationError("Error") else: return self.cleaned_data['player']
Отредактировано myarik (Апрель 9, 2013 11:01:38)
Офлайн
Нужно сделать свою форму для этой модели, в которой будет валидация и назначить эту форму модели:
admin.py
from django import forms MIN_PLAYER_COUNT = 5 class GameForm(forms.ModelForm): class Meta: model =Game def clean(self): """ Checks that we have at least MIN_PLAYER_COUNT player """ players= self.cleaned_data.get('player') if len(players) < MIN_PLAYER_COUNT : raise ValidationError("The game need at least %s player(s)" % MIN_PLAYER_COUNT) return self.cleaned_data class GameAdmin(admin.ModelAdmin): form = GameForm admin.register(Game, GameAdmin)
Отредактировано inoks (Апрель 9, 2013 10:54:23)
Офлайн
inoks
Нужно сделать свою форму для этой модели, в которой будет валидация и назначить эту форму модели:admin.py
Офлайн
>Сработало! Спасибо огромное!плюсуем, не стесняемсяна здоровье
Офлайн