我正在尝试在Django 1.8中编写我的模型,但是在添加引用另一个条目的条目时我遇到了一个问题。我解释一下:
这是我的模特:
class Store(models.Model):
created = models.DateTimeField(auto_now_add=True)
title = models.CharField(max_length=100, blank=True, default='')
description = models.TextField()
parentStore = models.ForeignKey('self')
这是我的序列化器:
class StoreSerializer(serializers.ModelSerializer):
choices=[(e.id,e.title) for e in Store.objects.all()]
if choices == []:
choices=[(1,None)]
parent = serializers.ChoiceField(source='parentStore_id',choices=choices)
class Meta:
model = Store
fields = ('id','title','description', 'parent')
def create(self, validated_data):
store = Store.objects.create(title=validated_data['title'],
parentStore_id=validated_data['parentStore_id'],
description=validated_data['description'])
return store
我可以使用API将Store添加到我的数据库,这就是响应:
HTTP 201 Created
Content-Type: application/json
Vary: Accept
Allow: GET, POST, HEAD, OPTIONS
{
"id": 334,
"title": "***0000000",
"description": "555555555",
"parent": 330
}
但是,当我在引用此节点(子存储)后添加新的Store juste时,我遇到了错误。 请求:
{
"title": "***0000000",
"description": "555555555",
"parent": 334
}
回应:
HTTP 400 Bad Request
Content-Type: application/json
Vary: Accept
Allow: GET, POST, HEAD, OPTIONS
{
"parent": [
"\"334\" is not a valid choice."
]
}
我的序列化程序似乎没有使用新值自动刷新。 当我重新启动Django并重放完全相同的请求时,我的条目成功添加。
你有什么想法吗?
答案 0 :(得分:0)
问题是,加载序列化程序时,您的选择会加载一次,而不是每个请求都加载。请尝试使用PrimaryKeyRelatedField
。
parent = serializers.PrimaryKeyRelatedField(source='parentStore_id')