Если я правильно понимаю ваши требования, то вам нужен способ отследить, заполнил ли пользователь все ваши формы или нет. Если это так, я бы предложил добавить модель, цель которой - точно это отследить. Что-то в форме:
class UserFormTracking(models.Model):
user = models.ForeignKey(settings.AUTH_MODEL, ..., unique=True)
form1_completed = models.BooleanField(default=False)
...
formn_completed = models.BooleanField(default=False)
@property
def all_completed(self):
return self.form1_completed and ... and self.formk_completed
Тогда я бы переопределил метод save()
каждой формы чем-то вроде следующего (предполагая, что это метод save()
K-й формы):
def save(self, user, **kwargs):
instance = super(MyForm, self).save(**kwargs)
forms_tracking_instance = UserFormTracking.objects.get_or_create(user=user)
forms_tracking_instance.formk_completed = True
forms_tracking_instance.save()
return instance
Обратите внимание, что вам нужно передать пользователя методу save()
. Это, вероятно, получится из запроса http, но это может отличаться. После этого все, что остается, чтобы проверить, заполнил ли пользователь u
каждую форму, - это запросить модель UserFormTracking
для экземпляра, пользователь которого u
, а для каждого formk_completed
установлено значение True
.
Помните, что для предотвращения несоответствий вы, вероятно, захотите выполнить переопределенные save()
методы ваших форм внутри транзакции.
Конечно, это довольно фиксированное решение. Если ваше приложение может часто меняться (в смысле добавления или удаления форм), вам нужно будет предложить более гибкое решение. Но вы можете следовать той же идее.