Этот вопрос выглядит глупым и простым, но я действительно не могу понять это.
У меня есть модель с полем внешнего ключа для другой модели, скажем:
class Parent:
name = models.CharField()
class Child:
name = models.CharField()
e_id = models.IntegerField()
parent = models.ForeignKey(Parent)
Я рендерил экземпляры Child с формами defalt django, без каких-либо дополнений. Я использую inlineformset_factory(Parent, Child, extra=1)
, если это важно.
И ключевой момент: django отображает parent
(который является внешним ключом) в качестве раскрывающегося ввода. И мне нужно показать идентификатор родителя в форме в виде простого ввода текста, а не раскрывающегося списка. Но я хочу сохранить все поведение внешнего ключа и заставить django проверять, что содержимое входных данных parent_id является действительным и существующим идентификатором патентной модели.
Я пытался создать ChildForm следующим образом:
class ChildForm(django.forms.ModelForm):
class Meta:
model = Child
fields = ('name', 'e_id', 'parent')
parent = CharField(label=_("Parent"), required=True)
И используйте это так:
inlineformset_factory(Parent, Child, extra=1)
И он отображается как charfield, как я хочу. Но здесь больше нет валидации и умных преобразований id в экземпляр. Если я пишу неверный parent_id, я получаю «Невозможно назначить« u'21 »»: «Children.parent» должен быть экземпляром «Parent». » ошибка.
Так что я чувствую, что делаю что-то не так. Я нашел этот ответ ( Поле базы данных ForeignKey в Django не как раскрывающийся список ), но похоже, что это какая-то мартышка, и я не уверен, что это django-способ сделать это.
Так каков правильный путь? Я использую Django 1.6.