フォーム内でオートコンプリートを使用しています。フォームの保存は、隠しフィールドを適切に取りたくないようです。
オートコンプリートには名前が表示されます: たとえば、'Steve Butabi' です。ユーザー名を送信することになっています。ユーザー名は「stevebutabi」です。入力値の検査時。ユーザー名「stevebutabi」が正しく表示されます。しかし、POST 内では、manager : 'Steve Butabi'
表示されます。そして、私はException Type: DoesNotExist
. 表示されている文字列ではなく、非表示のユーザー名が必要です。何が起こっているかはわかっていますが、それを修正する方法がわかりません。
だから私は何を求めていると思います:Djangoフォーム内のクリーン関数を無視する方法はありますか?
フォーム.py
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()
Javascript
$(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 }}
前もって感謝します。