У меня есть модель, которая выглядит так:
class Mentorship (models.Model):
mentor = models.ForeignKey(settings.AUTH_USER_MODEL, related_name='mentor_user_id')
mentee = models.ForeignKey(settings.AUTH_USER_MODEL, related_name='mentee_user_id')
objects = MentorshipManager()
def clean(self):
print(self.mentor_id) # is set and printed to stdout
print(self.mentee_id) # is set and printed to stdout
if Mentorship.objects.is_mentor(self.mentor_id, self.mentee_id):
raise ValidationError(_('This user is already a mentor.'))
У менеджера есть функция проверки того, является ли кто-то уже наставником другого пользователя, которая вызывается при clean()
экземпляре:
def is_mentor_for_goal(self, mentor_id, mentee_id, personal_goal_id):
if self.exists(mentor_id=mentor_id, mentee_id=mentee_id):
return True
else:
return False
Однако я всегда получаю исключение при доступе к атрибуту mentor_id
или mentee_id
в файле exists:
Django Version: 1.6.1
Exception Type: TypeError
Exception Value: exists() got an unexpected keyword argument 'mentor_id'
Есть ли причина, по которой я не могу получить доступ к полю _id в диспетчере? Я просто не понимаю, почему поле доступно в (несохраненном) экземпляре, но не в диспетчере.
2 ответа
Некоторые вещи mentor__id
будут работать только в методах набора запросов, но не такие вещи, как print
. Вы также должны использовать pk
вместо id
, вот как это будет работать:
class Mentorship(models.Model):
mentor = models.ForeignKey(settings.AUTH_USER_MODEL, related_name='mentor_user_id')
mentee = models.ForeignKey(settings.AUTH_USER_MODEL, related_name='mentee_user_id')
objects = MentorshipManager()
def clean(self):
print(self.mentor.pk) # is set and printed to stdout
print(self.mentee.pk) # is set and printed to stdout
if Mentorship.objects.filter(mentor=self.mentor).exists():
raise ValidationError(_('This user is already a mentor.'))
def is_mentor_for_goal(self, mentor_id, mentee_id, personal_goal_id):
return self.exists(mentor__pk=mentor_id, mentee__pk=mentee_id)
О ... мужик ... Это должно называться
if self.filter(mentor_id=mentor_id, mentee_id=mentee_id).exists()
Спасибо за ваши комментарии
Похожие вопросы
Новые вопросы
django
Django - это серверная платформа веб-приложений с открытым исходным кодом, написанная на Python. Он разработан для сокращения усилий, необходимых для создания сложных веб-сайтов и веб-приложений, управляемых данными, с особым упором на меньшее количество кода, отсутствие избыточности и более явное, чем неявное.
mentor__id=mentor_id
.