Найти - Пользователи
Полная версия: Django. ManyToMany связь. Проверка количества связей до сохранения объекта.
Начало » Django » Django. ManyToMany связь. Проверка количества связей до сохранения объекта.
1
Nabunon
Доброго всем дня!
Изучаю 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.: Админку не переписывал, а в пакетах джанго формы редактировать вообще дурной тон.
inoks
А как данные будут вноситься в модель?
Nabunon
Через форму административного интерфейса.
myarik
С Django недавно, если не ошибаюсь то проверку можно организовать так:
def clean_player(self):
 if self.player.count() < 5:
   raise forms.ValidationError("Error")
 else:
   return self.cleaned_data['player']
inoks
Нужно сделать свою форму для этой модели, в которой будет валидация и назначить эту форму модели:

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)
Nabunon
inoks
Нужно сделать свою форму для этой модели, в которой будет валидация и назначить эту форму модели:admin.py

Сработало! Спасибо огромное!
Как-то упустил момент, что можно скорректировать форму в админке на свой лад. Уже думал писать свою со своими view и url. )
inoks
>Сработало! Спасибо огромное!
плюсуем, не стесняемсяна здоровье
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