mrm*_*vin 1 django many-to-many foreign-keys django-rest-framework keyerror
我有以下型号:
class ProductColor(models.Model):
color_title = models.CharField(max_length=50)
class BasicProduct(models.Model):
product_title = models.CharField(max_length=150)
product_desc = models.TextField()
product_price = models.FloatField(default=10.0)
# Describes what colors are available for this product
product_colors = models.ManyToManyField(ProductColor)
class BasicCartItem(models.Model):
cart_product = models.ForeignKey(BasicProduct)
cart_color = models.ForeignKey(ProductColor, blank=True, default=None, null=True)
Run Code Online (Sandbox Code Playgroud)
和我的ModelSerializer:
class CartSerializer(serializers.ModelSerializer):
class Meta:
model = models.BasicCartItem
Run Code Online (Sandbox Code Playgroud)
我正在给出我的观点:
{'cart_product': 1}
Run Code Online (Sandbox Code Playgroud)
然后运行代码:
m = CartSerializer(data=inputdata)
if m.is_valid():
items = m.data # Generates KeyError: u'cart_color'
Run Code Online (Sandbox Code Playgroud)
stacktrace的摘录:
File "python2.7/site-packages/rest_framework/serializers.py", line 430, in to_representation
attribute = field.get_attribute(instance)
File "python2.7/site-packages/rest_framework/relations.py", line 103, in get_attribute
return get_attribute(instance, self.source_attrs)
File "python2.7/site-packages/rest_framework/fields.py", line 69, in get_attribute
instance = instance[attr]
KeyError: u'cart_color'
Run Code Online (Sandbox Code Playgroud)
知识渊博的人知道这里发生了什么吗?我被困在这里几个小时,我不知道我做错了什么..
谢谢.
您正在以错误的方式访问数据.您应该访问.validated_data序列化程序而不是.data.
m = CartSerializer(data=inputdata)
if m.is_valid():
items = m.validated_data # access validated data here
Run Code Online (Sandbox Code Playgroud)
为什么serializer.data方法对你的情况不起作用?
当你这样做时.data,序列化器将尝试序列化initial_data你没有传递instance参数.它会期望所有字段都存在,但由于cart_color数据不存在,它将引发一个KeyError.
你应该什么时候使用serializer.data呢?
通常serializer.data在序列化现有对象时使用.这将要求您instance在创建序列化程序的实例时传递参数.
m = CartSerializer(instance=my_object)
items = m.data # use .data when serializing an object
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1219 次 |
| 最近记录: |