私のアプリケーションではdjango + jqueryオートコンプリートウィジェットを使用しています。私は自分のテーブルの1つの管理フォームをカスタマイズして、入力テキストボックスにオートコンプリートを得ました。私は次の例外が発生し、フォームを保存するとき これは、ことを除いて働いています:Django/Jqueryの問題 - "u'Agua 'を割り当てることができません" Venta.producto "は" Producto "インスタンスでなければなりません
ValueError at /admin/Stock/venta/add/
Cannot assign "u'Agua'": "Venta.producto" must be a "Producto" instance.
Request Method: POST
Request URL: http://127.0.0.1:8080/admin/Stock/venta/add/
Exception Type: ValueError
Exception Value:
Cannot assign "u'Agua'": "Venta.producto" must be a "Producto" instance.
Exception Location: /usr/lib/pymodules/python2.6/django/db/models/fields/related.py in __set__, line 273
Python Executable: /usr/bin/python
Python Version: 2.6.5
...
Productoオブジェクトに私の自動補完テキストを変換していないようです。私はPOSTを見て、選択されたProductoの数値キー(すなわち、2)を送信しています。オートコンプリートのすべてを無効にすると、投稿はまったく同じですが動作します。ですから、admin.pyやmodels.pyソースコードの何かが間違っています。そして、それをオブジェクトに変換しているケースでは、他のオブジェクトに変換していないものがあります。
class VentaAdminForm(forms.ModelForm):
importe = forms.DecimalField()
producto = forms.CharField()
responsable = forms.CharField()
mesa = forms.IntegerField()
class Meta:
model = Venta
fields = ['producto', 'importe', 'responsable', 'mesa']
class VentaAdmin(admin.ModelAdmin):
form = VentaAdminForm
admin.site.register(Venta, VentaAdmin)
views.py
@login_required
def search(request):
results = []
if request.method != "GET":
return HttpResponse()
term = q = None
if request.GET.has_key(u'q'):
q = request.GET[u'q']
if request.GET.has_key(u'term'):
term = request.GET[u'term']
if not q or not term:
return HttpResponse()
if q == 'producto':
model_results = Producto.objects.filter(detalle__contains=term)
for x in model_results:
results.append({'label': x.detalle,'value': x.detalle, 'id': x.id })
elif q == 'responsable':
model_results = Empleado.objects.filter(nombre__contains=term)
for x in model_results:
results.append({'label': x.nombre,'value': x.nombre, 'id': x.id })
else:
raise Exception("Unknown query_object")
json = simplejson.dumps(results)
return HttpResponse(json, mimetype='application/json')
:
class Producto(models.Model):
detalle = models.CharField('Detalle', max_length=200)
importe = models.FloatField('Importe')
def __unicode__(self):
return self.detalle
class Empleado(models.Model):
nombre = models.CharField('Nombre', max_length=100)
def __unicode__(self):
return self.nombre
class Venta(models.Model):
importe = models.FloatField('Importe')
producto = models.ForeignKey(Producto)
responsable = models.ForeignKey(Empleado)
mesa = models.IntegerField()
以下がadmin.py一部である:
は以下models.py一部であります
javascriptの一部:
<script>
$(function() {
$("#id_producto").autocomplete({
source: "/search/?q=producto",
});
$("#id_responsable").autocomplete({
source: "/search/?q=responsable",
});
});
</script>
書き込み、すなわち:アグアは、オートコンプリートテキストボックスに、それはGETを送信し、応答は以下の通りです。 "アグア" はあるように見えます
http://127.0.0.1:8080/search/?q=producto =アグア&用語
[{"id": 3, "value": "Agua", "label": "Agua"}]
バージョン
django 1.1.1
jquery 1.5.1
jquery-ui 1.8.13
Rails? _Python_ではなく_Ruby_です。とにかく、それは動作しません、数値(プライマリキー)が_value_にある場合、それはコンボボックスのドロップダウン(他の1. 2。3。4の1つ下に表示されます)を選択すると、テキスト、つまり_Agua_がテキストボックスに表示されます。次に_value_はコンボボックスのオプションで、ラベルは選択用ですが、返信するように変更した場合、「値」:「Agua」、「ラベル」:2、...」がドロップボックスに表示されます私が1つを選択すると、選択テキストボックスにnumbre(プライマリーキー)が表示されます。 – Tavo