Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
TypeError:对象不可编辑-Django创建/获取_Django_Django Models - Fatal编程技术网

TypeError:对象不可编辑-Django创建/获取

TypeError:对象不可编辑-Django创建/获取,django,django-models,Django,Django Models,我今天遇到这个问题已经有一段时间了,一个永久的解决方案会很有帮助 我有一个供应商对象定义为 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

我今天遇到这个问题已经有一段时间了,一个永久的解决方案会很有帮助

我有一个供应商对象定义为

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"]))
在该视图中,如果我使用
过滤器
代替
获取
,我不会得到
类型错误:供应商不可编辑
消息

为了在一个方法中实现创建和更新功能,我编写了

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"}))
当我尝试使用有效数据创建一个新的供应商对象时,我会得到上面详述的
TypeError
响应,并生成此stacktrace:

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

我需要将这些数据发送到客户机,因为创建一个新的供应商记录会导致在视图中的几个位置插入一个新的HTML元素

发生该错误是因为
serialize
方法的第二个参数是QuerySet。 看

get
返回模型实例,但
filter
返回查询集

serialize函数的参数是要序列化的格式 要序列化的数据(请参见序列化格式)和要序列化的查询集

你可以这样写:

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

发生该错误的原因是
serialize
方法的第二个参数是QuerySet。 看

get
返回模型实例,但
filter
返回查询集

serialize函数的参数是要序列化的格式 要序列化的数据(请参见序列化格式)和要序列化的查询集

你可以这样写:

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