带选择窗口小部件的Django ModelForm – 使用object.uid作为默认选项值而不是object.id

我有一个继承自ModelForm的表单:

class ChildModel(ModelForm):
      class Meta:
          model = Documents
          fields = ('secretdocs')
          widgets = {
              'secretdocs': Select(attrs={'class': 'select'}),
          }

模型“secretdocs”有一个uid.但是当它打印出select和option时,选项值显示如下:

<select class="select" id="id_secretdocs" name="secretdocs">
    <option value="1">My Secret Doc</option>
</select>

但是我希望它具有选项的uid:

<select class="select" id="id_secretdocs" name="secretdocs">
    <option value="cd2feb4a-58cc-49e7-b46e-e2702c8558fd">My Secret Doc</option>
</select>

到目前为止,我试图使用BaseForm的数据对象并覆盖Select的value_from_datadict方法,但我很确定这不是正确的方法.有谁知道我怎么做到这一点?

提前致谢.

最佳答案
你可以这样做:

class ChildModel(ModelForm):

  secretdocs = forms.ChoiceField(choices=[(doc.uid, doc.name) for doc in Document.objects.all()])
  class Meta:
      model = Documents
      fields = ('secretdocs', )
      widgets = {
          'secretdocs': Select(attrs={'class': 'select'}),
      }

转载注明原文:带选择窗口小部件的Django ModelForm – 使用object.uid作为默认选项值而不是object.id - 代码日志