Первоначально я имел в моем models.py
Validation Исключить себя от QuerySet
def validate_project_name(value,self):
project_name = Team.objects.filter(Project_name=value)
if self.pk:
project_name = project_name.exclude(pk=self.pk)
if project_name:
raise ValidationError('This already exists.')
class Team(models.Model):
Project_name = models.CharField(max_length=250, validators=[validate_project_name])
Project_number = models.IntegerField()
Это работало в том смысле, что он не позволит пользователям вводить уже существующий Project_name
. Однако теперь я включил функцию редактирования/обновления. Поэтому, если пользователь хочет обновить свой собственный Team
, он поднимет ValidationError, поскольку он существует в базе данных. Например, если пользователь хочет сохранить тот же Project_name
, но обновить Project_number
, ошибка будет повышаться. Поэтому я хочу исключить self
из набора запросов. Я смотрел на этот пример:
django exclude self from queryset for validation
Так что я просто добавил следующий код в моем class Team
.
def clean_name(self):
project_name = self.cleaned_data['Project_name'].title()
qs = Team.objects.filter(Project_name=project_name)
if self.instance.pk is not None:
qs = qs.exclude(pk=self.instance.pk)
if qs.exists():
raise ValidationError("This already exists")
Но это не работает, так как при проверке ошибки не возникают ... Любые идеи?
Я попробовал, теперь говорит, что-то: объект 'команды' не имеет атрибута 'cleaned_data' На этой линии:. Project_name = self.cleaned_data [ 'PROJECT_NAME'] название() – anderish
чтения docs, 'cleaned_data' недействительны при проверке модели. Вы получите доступ к нему как 'self.project_name'. – themanatuf