Воздержитесь от создания объекта моделями Django после достижения определенного количества этого объекта в бд для конкретного пользователя

#python #django #django-rest-framework

Вопрос:

Я хочу, чтобы у меня был способ каким-то образом отображать сообщение об ошибке/приглашение на внешний интерфейс (может быть ответ json), всякий раз, когда пользователь пытается добавить объект, в моем случае у 1 пользователя не может быть более 50 задач, хранящихся внутри бд, моя модель бд проста, это просто модель задачи и модель пользователя, у каждой задачи есть идентификатор пользователя с внешним ключом. Я делал это в голанг-горме с помощью крючков, есть ли какой-либо аналогичный метод в Джанго, чтобы сделать это эффективно?

Комментарии:

1. Можете ли вы поделиться формой (и представлением), в которой вы хотите добавить задачи пользователю?

Ответ №1:

Вы можете переопределить метод очистки вашей Task модели, чтобы вызвать a ValidationError , если у связанного пользователя уже есть 50 задач.

Что-то вроде этого :

 class Task(models.Model):
   user = models.ForeyKey(User, on_delete=models.CASCADE, related_name='tasks')

   def clean(self):
       if self.user.tasks.count() >= 50:
           raise ValidationError('User cannot have more than 50 tasks')
 

Комментарии:

1. Я думаю, что это не сработает, так clean как метод вызывается при обновлении значений и до сохранения объекта формой. Но поле «многие ко многим» обновляется после сохранения объекта модели. Так что проверка «слишком ранняя».

2. Вероятно, вы можете проверить это в форме, чтобы это было подтверждено перед сохранением объекта.