Проблема может заключаться в том, что несколько полей могут иметь одинаковые 1002 * verbose_name
, следовательно, это неправильный идентификатор.В любом случае это не задача подробного имени выступать в качестве идентификатора, они используются, как сказано в документации to:
Удобное для восприятия имя дляполе .Если подробное имя не задано, Django автоматически создаст его, используя имя атрибута поля, преобразовав подчеркивания в пробелы.
Мы можем создать функцию, которая делает это, например:
def get_field_from_verbose(meta, verbose_name):
try:
return next(f for f in _meta.get_fields() if f.verbose_name == verbose_name)
except:
raise KeyError(verbose_name)
Мы можем позволить ему работать с несколькими именами полей, например:
def get_field_from_verbose(meta, verbose_name):
try:
return next(
f for f in _meta.get_fields()
if f.verbose_name <b>in (f.name, f.verbose_name, f.db_column)</b>
)
except:
raise KeyError(verbose_name)
Но это даже выглядит более проблематично, поскольку теперь имя столбца базы данных одного поля может быть равно подробному именидругого поля, что делает его еще более бессмысленным.
и, таким образом, назовите его с помощью:
get_field_from_verbose(Model._meta, 'Test Field')
Это также повысит KeyError
, поскольку такое поле не может быть найдено.
После того, как пользователь установит флажок, отображающий подробное имя, я использую это имя для доступа к имени поля для использования в запросе.
Если этоБолее того, ради пользовательского интерфейса, вы должны указать имя поля как значение для флажка, а подробное имя как «label».Например:
<input type="checkbox" name="sel_fields[]" value="<b>fieldname1</b>"><b>Verbose fieldname 1</b><br>
<input type="checkbox" name="sel_fields[]" value="<b>fieldname2</b>"><b>Verbose fieldname 2</b><br>
<input type="checkbox" name="sel_fields[]" value="<b>fieldname3</b>"><b>Verbose fieldname 3</b><br>
Здесь пользователь, таким образом, увидит Verbose fieldname 1
для первого флажка, но если пользователь выберет этот флажок и нажмет кнопку отправки, представление получит значение fieldname1
таким образом, настоящее имя этого поля.
По сути, это то, что делает Django, когда вы, например, используете ModelChoiceField
в форме: он представляет элементы красиво, но за занавесками он проходит основнойключ в качестве значения, и, следовательно, когда кто-то отправляет форму, мы получаем первичный ключ выбранного элемента, а не текстовое представление этого объекта.