Форма Django с ModelChoiceField на UUID не показывает его содержимое в cleaned_data - PullRequest
0 голосов
/ 28 февраля 2019

У меня есть модель:

class Code(models.Model):
    section = models.CharField(max_length=255)
    code_uid = models.UUIDField()    

    def __str__(self):
        return self.section

и форма:

class MyForm(Form):
    code_uid = ModelChoiceField(queryset=Code.objects.all(), to_field_name="code_uid")

Но следующий код после POST этой формы:

if my_form.is_valid():            
    print(my_form)
    print(my_form.cleaned_data)
    print(my_form.cleaned_data["code_uid"])
    print(type(my_form.cleaned_data["code_uid"]))

Печать:

для my_form правильно отображаемый HTML:

<tr><th><label for="id_code_uid">Code uid:</label></th><td><select name="code_uid" required id="id_code_uid">
  <option value="">---------</option>

  <option value="e3112238-0768-1111-aaaa-4654ab799752">foo</option>

  <option value="e3112238-0768-1111-aaaa-4654ab799752">bar</option>

для my_form.cleaned_data :

{'code_uid': <Code: foo>}  <== should be the UUID

для my_form.cleaned_data ["code_uid"] :

foo

для типа (my_form.cleaned_data ["code_uid"]) :

<class 'creator.models.Code'>

Как мне получить значение UUID в словаре cleaned_values?

1 Ответ

0 голосов
/ 28 февраля 2019

Я не уверен, что вы хотите достичь:

  • to_field_name просто указывает, что следует использовать в качестве значения в форме;он должен быть уникальным (ладно, uuid практически уникален ...).Но здесь это не имеет смысла, так как по умолчанию используется django-autogenerated pk, который гарантированно будет уникальным
  • , что my_form.cleaned_data["code_uid"] содержит в любом случае экземпляр модели creator.models.Code, выбранной вами вформа.Вы можете получить my_form.cleaned_data["code_uid"].code_uid для UUID и делать с ним то, что хотели.
...