Уведомления

Группа в Telegram: @pythonsu
  • Начало
  • » Django
  • » Django. ManyToMany связь. Проверка количества связей до сохранения объекта. [RSS Feed]

#1 Апрель 8, 2013 19:39:16

Nabunon
Зарегистрирован: 2013-04-08
Сообщения: 3
Репутация: +  0  -
Профиль   Отправить e-mail  

Django. ManyToMany связь. Проверка количества связей до сохранения объекта.

Доброго всем дня!
Изучаю 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)

Офлайн

#2 Апрель 8, 2013 21:52:27

inoks
От: Russia
Зарегистрирован: 2012-12-11
Сообщения: 343
Репутация: +  35  -
Профиль   Адрес электронной почты  

Django. ManyToMany связь. Проверка количества связей до сохранения объекта.

А как данные будут вноситься в модель?

Офлайн

#3 Апрель 8, 2013 22:19:17

Nabunon
Зарегистрирован: 2013-04-08
Сообщения: 3
Репутация: +  0  -
Профиль   Отправить e-mail  

Django. ManyToMany связь. Проверка количества связей до сохранения объекта.

Через форму административного интерфейса.

Офлайн

#4 Апрель 9, 2013 06:57:13

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

Django. ManyToMany связь. Проверка количества связей до сохранения объекта.

С 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)

Офлайн

#5 Апрель 9, 2013 10:54:00

inoks
От: Russia
Зарегистрирован: 2012-12-11
Сообщения: 343
Репутация: +  35  -
Профиль   Адрес электронной почты  

Django. ManyToMany связь. Проверка количества связей до сохранения объекта.

Нужно сделать свою форму для этой модели, в которой будет валидация и назначить эту форму модели:

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)

Офлайн

#6 Апрель 9, 2013 14:17:43

Nabunon
Зарегистрирован: 2013-04-08
Сообщения: 3
Репутация: +  0  -
Профиль   Отправить e-mail  

Django. ManyToMany связь. Проверка количества связей до сохранения объекта.

inoks
Нужно сделать свою форму для этой модели, в которой будет валидация и назначить эту форму модели:admin.py

Сработало! Спасибо огромное!
Как-то упустил момент, что можно скорректировать форму в админке на свой лад. Уже думал писать свою со своими view и url. )

Офлайн

#7 Апрель 9, 2013 20:55:15

inoks
От: Russia
Зарегистрирован: 2012-12-11
Сообщения: 343
Репутация: +  35  -
Профиль   Адрес электронной почты  

Django. ManyToMany связь. Проверка количества связей до сохранения объекта.

>Сработало! Спасибо огромное!
плюсуем, не стесняемсяна здоровье

Офлайн

  • Начало
  • » Django
  • » Django. ManyToMany связь. Проверка количества связей до сохранения объекта.[RSS Feed]

Board footer

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

Powered by DjangoBB

Lo-Fi Version