Django Model ValueError - PullRequest
       2

Django Model ValueError

1 голос
/ 20 февраля 2012

Я обращаюсь к электронным письмам на своем почтовом сервере, беру тело каждого электронного письма и затем применяю регулярные выражения, чтобы найти данные, необходимые для заполнения моей модели Django.

Все это прекрасно работает, за исключением одного поля, которое связано как внешний ключ с другим полем модели. Несмотря на то, что значение в моей электронной почте совпадает со значением, указанным в моей другой модели, оно терпит неудачу ....

Ошибка:

ValueError: Cannot assign "'Humanities'": "Subject.faculty" must be a "Faculty" instance.

Например, скажем, каждый школьный предмет должен быть частью факультета. При заполнении базы данных через форму, для поля факультета субъекта я раскрываю меню со списком значений / экземпляров факультета, поскольку в моей модели определено отношение внешнего ключа, то есть для поля факультета, которое я могу выбрать из гуманитарных наук, искусства, Технология проектирования и т. Д.

Но когда я нахожу значение «Гуманитарные науки» в своем электронном письме и пытаюсь добавить его в модель базы данных, я получаю сообщение об ошибке выше.

Кто-нибудь пролил свет на это? Я тупой или это больше, чем ValueError для меня, значения одинаковы в обоих случаях

Спасибо

Больше запрашиваемого кода:

class Faculty(models.Model):
  name = models.CharField(primary_key=True, max_length=50)
  leader = models.CharField(max_length=50)
  email = models.EmailField()
  mailing_list = models.ManyToManyField("Contact", null=True)

class Subject(models.Model):
  name = models.CharField(max_length=50)   
  faculty = models.ForeignKey(Faculty, to_field="name")
  faculty_head = models.CharField(max_length=50)

Ответы [ 3 ]

1 голос
/ 20 февраля 2012

Похоже, вы пытаетесь присвоить строку "Humantities" для отношения ForeignKey. Это не имеет смысла. Вам нужно либо найти, либо создать фактический объект Faculty с именем «Гуманитарные науки» и присвоить его Subject. Нечто подобное на ваш взгляд (в зависимости от того, как настроена ваша форма):

if form.is_valid():
  faculty_str = form.cleaned_data['faculty']
  (faculty, was_created) = Faculty.objects.get_or_create(name=faculty_str, ...)
  # It's hard to tell if you are using a ModelForm or just a normal Form. Anyway, assume we already have access to the Subject object
  subject.faculty = faculty
  subject.save()

get_or_create()

0 голосов
/ 20 февраля 2012

Сначала необходимо создать экземпляр факультета.

faculty = Faculty(name='', leader='', email='')
faculty.save()

subject.faculty = faculty
subject.save()
0 голосов
/ 20 февраля 2012

Ваша ценность - "Гуманитарные науки", возможно, вы хотите искать гуманитарные науки (без кавычек).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...