Я не могу понять, почему при попытке доступа к self.instance.user при переопределении метода очистки моей формы я получаю RelatedObjectDoesNotExist
. Это происходит не каждый раз и кажется почти случайным, поэтому это доставляет мне много хлопот. Смотрите ниже мою форму и модель
forms.py
class UserSurveyQueueForm(forms.ModelForm):
def __init__(self, *args, **kwargs):
user = kwargs.pop('user')
super().__init__(*args, **kwargs)
self.fields['queue'].queryset = Employees.objects.all()
self.fields['queue'].required = False
def clean(self):
cleaned_data = self.cleaned_data
users_added = cleaned_data.get('queue')
if users_added:
for user in users_added:
if user == self.instance.user:
raise forms.ValidationError("Yikes, you can't add {} to {}'s queue!".format(
self.instance.user.employee.first_name, self.instance.user.employee.first_name
))
last_created = UserNPS.objects.filter(user=user.employee, reporter=self.instance.user.employee).values(
'created_at').last()
if last_created:
timedelta = (timezone.now() - last_created['created_at']).days
if timedelta <= settings.DAYS_BETWEEN_SURVEYS:
raise forms.ValidationError("You have recently filled out a survey for {} {}, please wait {} days before doing so again!".format(
user.employee.first_name, user.employee.last_name, settings.DAYS_BETWEEN_SURVEYS - timedelta))
class Meta:
model = UserSurveyQueue
fields = ('queue',)
widgets = {
'queue': autocomplete.ModelSelect2Multiple(
url='user-autocomplete',
attrs={
'data-placeholder': 'Search by name, username, email, department, office, or team',
}
),
}
models.py
class UserSurveyQueue(models.Model):
user = models.OneToOneField(
Employees,
on_delete=models.CASCADE
)
queue = models.ManyToManyField(
Employees,
blank=True,
related_name='survey_queue',
)
class Meta:
verbose_name = ('Survey Queue')
verbose_name_plural = ('Survey Queues')
def current_queue(self):
return ", ".join([str(q.employee.username) for q in self.queue.all()])
def __str__(self):
return self.user.employee.username
Ошибка:
File "forms.py" in clean
62. if user == self.instance.user:
File "lib/python3.6/site-packages/django/db/models/fields/related_descriptors.py" in __get__
175. "%s has no %s." % (self.field.model.__name__, self.field.name)
django.db.models.fields.related_descriptors.RelatedObjectDoesNotExist: UserSurveyQueue has no user.