2015-09-07 2 views
0

Я пытаюсь написать свою модель в Django 1.8, но перед добавлением записи, ссылающейся на другую запись, возникает проблема. Я объясняю:Django refresh/reload Самостоятельная ссылка

Это моя модель:

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, и это ответ :

HTTP 201 Created 
Content-Type: application/json 
Vary: Accept 
Allow: GET, POST, HEAD, OPTIONS 

{ 
    "id": 334, 
    "title": "***0000000", 
    "description": "555555555", 
    "parent": 330 
} 

Однако, когда я добавить новый магазин Juste после реферирования этого узла (subStore), я сталкиваюсь ошибка. Запрос:

{ 
    "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

Проблема в том, что ваш выбор загружается один раз, когда сериализатор загружается, а не для каждого запроса. Вместо этого попробуйте использовать PrimaryKeyRelatedField.

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

Благодарим за ответ. Это возможно поможет решить мою проблему, но как я могу заставить некоторые пользовательские варианты? как я: choice = [(e.id, e.title) для e в Store.objects.all()] или choice = [(1, None)] – hzrari

+0

Я ожидаю быстрой перезагрузки этого выбора, переопределяя создать, обновить или __init__? возможно ли это или я должен передумать свою модель? – hzrari

+0

Я не знаком с внутренними структурами рамки, поэтому я не знаю, как динамически обновлять выбор. Вы можете попробовать просить список рассылки [rest framework list] (https://groups.google.com/forum/#!forum/django-rest-framework) (сообщение здесь, если вы получите ответ!) – Alasdair