/
eb
/
kittygram2
Обзор
Документация
Войти
/
eb
/
kittygram2
Код
Запросы
0
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
cats/models.py
48 строк
1 KB
Evgeniy Budaev
Встроенные валидаторы для сериализаторов
10 июл 2021, 09:57
10 июл 2021, 09:57
60a6b50
Код
Авторство
О чём код?
from django.contrib.auth import get_user_model from django.db import models CHOICES = ( ('Gray', 'Серый'), ('Black', 'Чёрный'), ('White', 'Белый'), ('Ginger', 'Рыжий'), ('Mixed', 'Смешанный'), ) User = get_user_model() class Achievement(models.Model): name = models.CharField(max_length=64) def __str__(self): return self.name class Cat(models.Model): name = models.CharField(max_length=16) color = models.CharField(max_length=16, choices=CHOICES) birth_year = models.IntegerField() owner = models.ForeignKey( User, related_name='cats', on_delete=models.CASCADE) achievements = models.ManyToManyField(Achievement, through='AchievementCat') class Meta: """Валидация на то, чтобы в БД не было двух и более записей, у которых имя кота и хозяина совпадают.""" constraints = [ models.UniqueConstraint( fields=['name', 'owner'], name='unique_name_owner' ) ] def __str__(self): return self.name class AchievementCat(models.Model): achievement = models.ForeignKey(Achievement, on_delete=models.CASCADE) cat = models.ForeignKey(Cat, on_delete=models.CASCADE) def __str__(self): return f'{self.achievement} {self.cat}'