Как получить значение внешнего ключа вместо ключа в сетке ExtJS, используя модели Django? - PullRequest
0 голосов
/ 21 апреля 2019

Я создаю простое веб-приложение «Диспетчер задач», используя Django 1.11 и ExtJS4 в качестве клиентской части.

Каждая созданная пользователем запись будет иметь свою категорию. Теперь у меня есть проблема - в сетке ExtJS каждая категория записи отображается как значение «id» категории. И это справедливо, потому что я использую внешний ключ для идентификатора.

Как отобразить поле типа вместо идентификатора в таблице сетки ExtJS?

Я пытался использовать опцию django 'to_field = type', и она фактически работает, вместо 'category_id = id', я получил 'category_id = type'. Но мой учитель сказал, что это не решение для этого случая, и в бэкэнде я должен работать с «id».

models.py

class Entry(models.Model):
    headline = models.CharField(max_length=255)
    body_text = models.TextField()
    pub_date = models.DateTimeField(auto_now_add=True)
    category = models.ForeignKey('Category', on_delete=models.CASCADE)


class Category(models.Model):
    type = models.CharField(max_length=255, unique=True)

В views.py я отправляю формат JSON для клиентской части ExtJS

views.py

def JS_entries_list(request):
    list_of_entries = Entry.objects.all().values()
    context = {
        'data': list(list_of_entries)
    }
    return JsonResponse(context)

А вот моя модель ExtJS, которую я использую для хранения сетки. Здесь, как вы можете видеть, я получаю 'category_id' как 'int'

Ext.define('Entry', {
        extend: 'Ext.data.Model',

        idProperty: 'entryID',

        fields: [{
            name: 'id',
            type: 'int',
        }, {
            name: 'uuid',
            type: 'string',
        }, {
            name: 'user_id',
            type: 'int',
        }, {
            name: 'headline',
            type: 'string',
        }, {
            name: 'body_text',
            type: 'string',
        }, {
            name: 'pub_date',
            type: 'date',
        }, {
            name: 'category_id',
            type: 'int',
        }, {
            name: 'fav_flag',
            type: 'bool',
        }, {
            name: 'published',
            type: 'bool',
        }]
    });

Так что, если я правильно понял, теперь я должен получить «идентификатор категории» из базы данных, а затем где-нибудь (на стороне сервера или клиента) преобразовать его в «тип категории» и отобразить в сетке extjs. Теперь, пожалуйста, помогите мне найти правильный и элегантный способ сделать это?

1 Ответ

0 голосов
/ 21 апреля 2019

В вашем наборе запросов вы можете указать нужные значения из базы данных внутри .values(), и тогда у вас будет список объектов.Например, list_of_entries = Entry.objects.all().values('headline', 'category__id', 'foo', 'bar')

Посмотрите здесь

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