Как правильно создать ответ для выбранных значений для Ext.data.TreeStore на django - PullRequest
0 голосов
/ 16 сентября 2018

У меня есть несколько объектов в базе данных, которые я хочу отобразить в Ext.tree.Panel -

[
{"model": "hello_extjs.storage", "pk": 1, "fields": {"code": "111", "name": "Test Main", "id_parent": 1}},
{"model": "hello_extjs.storage", "pk": 2, "fields": {"code": "222", "name": "Test1 ", "id_parent": 1}}, 
{"model": "hello_extjs.storage", "pk": 3, "fields": {"code": "333", "name": "Test2 ", "id_parent": 1}}, 
{"model": "hello_extjs.storage", "pk": 4, "fields": {"code": "444", "name": "Main Test2 ", "id_parent": 1}}, 
{"model": "hello_extjs.storage", "pk": 5, "fields": {"code": "555", "name": "Test3", "id_parent": 4}}, 
{"model": "hello_extjs.storage", "pk": 6, "fields": {"code": "666", "name": "Test4", "id_parent": 4}}
]

Сама модель выглядит так:

class Storage(models.Model):
    code     =   models.CharField(max_length = 255, null=True)
    name      =   models.CharField(max_length = 255, null=True)
    id_parent  = models.ForeignKey('self', on_delete=models.CASCADE)

Как правильно сериализовать данныеза ответ в Ext.data.TreeStore?

from django.core import serializers
...
    if model == 'Storage':
                if method == 'Read':
                    try:
                        # Read the data                        
                        storage = list(Storage.objects.values('id', 'name', 'id_parent'))
                        result = {'data': storage, 'meta': {'success': True, 'msg': ''}}
                        tree_data = serializers.serialize("json", Storage.objects.all())#How to correctly create an array of data for an answer in Ext.data.TreeStore?
                        print('Look: ' + str(tree_data))                                            
                        return HttpResponse(tree_data)
                        ....

1 Ответ

0 голосов
/ 16 сентября 2018

Так как здесь в модели все в порядке, мы можем изменить способ запроса:

from django.http import JsonResponse

# ...

if model == 'Storage' and method == 'Read':
    storage = list(Storage.objects.values('id', 'name', 'id_parent'))
    result = {'data': list_sr, 'meta': {'success': True, 'msg': ''}}
    return JsonResponse(result)

Используя .values(..), мы позволяем Django создавать такие словари самостоятельно.Затем мы оборачиваем результат в словарь Python (я переписал 'true' в true, поскольку, если мы выполним дамп JSON, в противном случае он будет использовать строковый литерал вместо логического литерала).Наконец, мы возвращаем JsonResponse.

. Если вам нужна более сложная сериализация, вам следует использовать сериализатор [djando-drf-doc] .

.Я не уверен, что поле с id_parent - хорошая идея.Обычно в Джанго каждый делает ForeignKey [django-doc] .Затем Django автоматически сгенерирует поле fk_id, содержащее значение первичного ключа, к которому относится объект.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...