Python django中的自动完成未使用表单清理的\u数据

Python django中的自动完成未使用表单清理的\u数据,python,django,django-forms,jquery-autocomplete,cleaned-data,Python,Django,Django Forms,Jquery Autocomplete,Cleaned Data,我在表单中使用自动完成。保存的表单似乎不希望正确地接收我的隐藏字段 自动完成显示一个名称:例如“Steve Butabi”。它应该发送一个用户名。用户名为“stevebutabi”。在检查输入值时。用户名“stevebutabi”正确显示。但在博文中,经理说:“史蒂夫·布塔比”。我得到一个异常类型:DoesNotExist。我需要隐藏的用户名,而不是它显示的字符串。我知道发生了什么,我只是不知道如何修复它 所以我猜我要问的是:有没有办法忽略Django表单中的clean函数 forms.py J

我在表单中使用自动完成。保存的表单似乎不希望正确地接收我的隐藏字段

自动完成显示一个名称:例如“Steve Butabi”。它应该发送一个用户名。用户名为“stevebutabi”。在检查输入值时。用户名“stevebutabi”正确显示。但在博文中,经理说:“史蒂夫·布塔比”。我得到一个异常类型:DoesNotExist。我需要隐藏的用户名,而不是它显示的字符串。我知道发生了什么,我只是不知道如何修复它

所以我猜我要问的是:有没有办法忽略Django表单中的clean函数

forms.py

Javascript

模板


提前感谢。

您是否正在处理自动完成的select事件?您需要捕获select事件,然后将值分配给隐藏字段。@dannyroa Yes。编辑:添加了js“/autocomplete/managers/”的json响应是什么样子的?你到底在问什么?manager:“Steve Butabi”可能是由该用户名标识的manager对象的repr或unicode。那么,这到底是怎么回事呢?弄明白了。我取出{{form.manager}}并将其替换为。不知道这有什么关系。
manager = forms.CharField(max_length=200, required=True, widget=forms.TextInput(attrs={'class':'input-text','id':'id_managerbox'}))

def clean(self):
     if not 'manager' in self.cleaned_data:
          raise forms.ValidationError('You must supply a manager for this fund.')
     return self.cleaned_data

def save(self, request):
     if self.is_valid():
          if self.cleaned_data['manager']:
               manager = ManagerProfile.objects.get(user__username=self.cleaned_data['manager'])
               # I've also tried :
               manager = ManagerProfile.objects.get(user__username=request.POST['manager'])
    ...
               ManagesFund.objects.get(manager=manager).save()
   $(document).ready(function() {  
         $.get('/autocomplete/managers/', function(data) {
              var completions = new Array();
              var dict = JSON.parse(data, function(key, value) {
                   completions.push(key);
                   return value;
              });
              $('#id_managerbox').autocomplete({
                   source: completions,
                   minLength: 2,
                   select: function(event, ui) {
                        $('#id_manager').val(dict[ui.item.value]);
                   }
              });
         });
    });
<input type="hidden" name="manager" id="id_manager" />
{{ form.manager }}