0

今日、しばらくこの問題に遭遇しており、恒久的な解決策が役立つでしょう.

次のように定義された Vendor オブジェクトがあります

class Vendors(models.Model):
  vendor_id = models.IntegerField(primary_key=True)
  vendor_name = models.CharField(max_length=50L)
  demo_vendor = models.IntegerField()
  url = models.CharField(max_length = 100L, null = True)
  logo = models.CharField(max_length = 100L, null = True)
  date_created = models.DateTimeField()
  class Meta:
    db_table = 'txn_vendors'

ビューでは、新しいベンダーの作成と既存のベンダーの更新を可能にするフォームを実装しています。これを行うにはgetVendorData、クライアントに送信する前に JSON でデータをシリアル化する必要があるメソッドを実装する必要がありました。

serialized = serializers.serialize("json", Vendors.objects.filter(vendor_id = incomingData["id"]))

そのビューで、filter代わりにを使用すると、メッセージが表示されgetません。TypeError : Vendors is not iterable

1 つのメソッドで作成機能と更新機能を実装するために、私は次のように書きました。

def saveVendorData(request):
  incomingData = simplejson.loads(request.POST.get("data", None))

  if incomingData is not None:
    vendor = None
    newVendor = False

    if incomingData["id"] == "":
      vendor = Vendors.objects.create(vendor_name = incomingData["vendor_name"], demo_vendor = False, date_created = datetime.now(), url = incomingData["vendor_url"], logo = None)
      newVendor = True
    else:
      vendor = Vendors.objects.get(vendor_id = incomingData["id"])
      vendor.vendor_name = incomingData["vendor_name"]
      vendor.url = incomingData["vendor_url"]

      vendor.save()

    serialized = serializers.serialize("json", vendor)

    return HttpResponse(simplejson.dumps({"success" : "true", "new_vendor" : newVendor, "data" : serialized}), mimetype = "application/json")

  else:
    return HttpResponse(simplejson.dumps({"success" : "false", "message" : "Issue with data reception in server"}))

有効なデータを使用して新しい Vendors オブジェクトを作成しようとすると、TypeError上記の応答が返され、次のスタック トレースが生成されます。

Vendor Data: [{"pk": 5, "model": "app.vendors", "fields": {"url": "nurturing seniors", "demo_vendor": 1, "vendor_name": "NURTURING SENIORS", "date_created": null, "logo": null}}]
[15/Aug/2013 20:38:01] "POST /getVendorData/ HTTP/1.1" 200 218

Internal Server Error: /saveVendorData/

Traceback (most recent call last):
File "/usr/local/lib/python2.7/dist-packages/django/core/handlers/base.py", line 115, in get_response
response = callback(request, *callback_args, **callback_kwargs)

File "/media/Storage/code_projects/Rowdmap_Uboat/app/taxonomy_views.py", line 272, in saveVendorData
serialized = serializers.serialize("json", vendor)

File "/usr/local/lib/python2.7/dist-packages/django/core/serializers/__init__.py", line 99, in serialize
s.serialize(queryset, **options)

File "/usr/local/lib/python2.7/dist-packages/django/core/serializers/base.py", line 42, in serialize
for obj in queryset:

TypeError: 'Vendors' object is not iterable

新しい Vendors レコードを作成すると、ビュー内のいくつかの場所に新しい HTML 要素が挿入されるため、このデータをクライアントに送信する必要があります。

4

1 に答える 1

3

このエラーは、serializeメソッドの 2 番目のパラメーターが QuerySet であるため発生します。こちらをご覧ください

getModel インスタンスを返しますが、QuerySet をfilter返します

serialize 関数の引数は、データをシリアル化する形式 (「シリアル化形式」を参照) と、シリアル化する QuerySet です。

次のように書くことができます。

serialized = serializers.serialize("json", [vendor])
于 2013-08-16T01:54:23.910 に答える