Я понимаю, что об этом уже спрашивали, но мне не удалось найти вопрос, который действительно касался того, что я пытаюсь сделать. Я думаю, что это довольно просто, но я хотел бы знать, что население думает лучше всего здесь.
Допустим, у нас есть следующее:
models.py
class TestClass(models.Model):
user = models.ForeignKey(User)
testfield = models.CharField()
testbool = models.BooleanField(default=False)
def save(self, *args, **kwargs):
"""
- what we're trying to do here is ensure that the User doesn't have more than
X (lets say 5) related test fields.
- what if we also wanted to add validation to testfield to ensure it was
only [a-zA-Z]?
"""
if TestClass.objects.filter(user=self.user).count() >= 5:
# How do we exit gracefully?
return
super(TestClass, self).save(*args, **kwargs)
Комментарии в функции сохранения в значительной степени подводят итог моего вопроса:
- Как мы можем гарантировать, что для данного пользователя не более 5 связанных TestClass?
- Как изящно выйти из сохранения (без сохранения), если уже есть 5
- Как мы можем сообщить об этом обратно пользователю?
- где мы проверяем объект тестового поля, чтобы убедиться, что он имеет только [a-z]? Могу ли я просто импортировать и сделать это здесь? должен я?
Лучше ли бросить все это здесь? Должен ли я запустить сигнал pre_save? Или мне просто использовать ModelForm с валидацией?