У меня есть две модели, Tag
и TagGroup
.Поле выбора Django, заполненное queryset - сохранить идентификатор, но показать значение
class TagGroup(models.Model):
tag_group_name = models.CharField(max_length=100)
class Tag(models.Model):
tag_name = models.CharField(max_length=100)
tag_group = models.ForeignKey(TagGroup, blank=True, null=True)
Я поставил TagGroup
форму как поле выбора в шаблон, так что я могу назначить TagGroup
в тег. Я создал эту форму для заполнения из запроса TagGroup
.
class TagGroupForm(ModelForm):
tag_group_name = forms.ModelChoiceField(queryset=TagGroup.objects.values_list('id', 'tag_group_name'), required=False)
class Meta:
model = TagGroup
fields = [
'tag_group_name'
]
Я не видел каких-либо очевидных инструкций, как я могу назначить Ид в таблице тегов, показывая пользователю только значение тега в поле выбора в шаблоне.
В настоящее время выше показывает:
Пара вопросов:
является QuerySet правильно? Я пробовал без «
values_list
», но тогда он просто показывает «Объект» в поле формы в шаблоне?Как я могу скрыть идентификатор, чтобы сохранить его, показывая только фактическое значение строки в поле формы?
Edited добавить обновленный вид:
class TagGroupForm(ModelForm):
tag_group_name = forms.ModelChoiceField(queryset=TagGroup.objects.all(), to_field_name = 'tag_group_name', required=False)
class Meta:
model = TagGroup
fields = [
'tag_group_name'
]
это теперь производит следующий .. выглядит близко .. значение форма имеет хорошую строку, но фактическое значение, отображаемое пользователю еще «Объект TagGroup». Как это показать?
я могу купить, что он способен связать идентификатор к выбранному объекту, так что я не нужно явно иметь QuerySet включить идентификатор. Однако, если я не укажу явным образом, какое поле использовать в качестве значения для отображения пользователя, он дает «объект TagGroup» в поле формы в качестве выбора. Если я скажу, какое поле использовать, например values_list ('tag_group_name'), то он показывает строку, но кодируется, как на моем скриншоте выше. – curtisp
@genoki - Я не уверен, что вы видели мой первоначальный ответ или мою полностью переработанную версию, но текст, который он хочет отобразить, основан на строчном представлении модели, тогда вы можете выбрать другое значение * * используя 'to_field_name', если вы хотите, но так как вы просили по-прежнему использовать идентификатор в качестве значения, которое вам просто нужно для установки правильного отображаемого текста – Sayse
спасибо. Я также попытался с именем 'to_field_name', который не возвращал желаемые результаты. Я обновил свой вопрос с его результатами. Кстати, что вы подразумеваете под представлением _string модели_? – curtisp