Django刷新/重新加载自引用模型

时间:2015-09-07 21:52:09

标签: django python-2.7 django-rest-framework

我正在尝试在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并重放完全相同的请求时,我的条目成功添加。

你有什么想法吗?

1 个答案:

答案 0 :(得分:0)

问题是,加载序列化程序时,您的选择会加载一次,而不是每个请求都加载。请尝试使用PrimaryKeyRelatedField

parent = serializers.PrimaryKeyRelatedField(source='parentStore_id')