如何使用 Django 模型获取外键值而不是 ExtJS 网格中的键?
How to get foreign key value instead of key in an ExtJS grid, using Django models?
我正在创建一个简单的 'task manager' Web 应用程序,使用 Django 1.11 和 ExtJS4 作为客户端。
每个用户创建的条目都有自己的类别。
现在我有一个问题 - 在 ExtJS 网格中,条目的每个类别显示为类别的 'id' 值。这是公平的,因为我使用外键来标识。
如何在 ExtJS 网格中显示类型字段而不是 id table?
我尝试使用 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 我正在为 ExtJS 客户端发送 JSON 格式
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',
}]
});
所以如果我做对了,现在我应该从数据库中收到一个 'category id',然后在某个地方(在服务器或客户端)将它转换为 'category type' 并显示在 extjs 网格中。
现在,你能帮我找到一个正确而优雅的方法吗?
在您的查询集上,您可以从 .values()
中的数据库中指定您想要的值,然后您将获得一个对象列表。
例如 list_of_entries = Entry.objects.all().values('headline', 'category__id', 'foo', 'bar')
看看here
我正在创建一个简单的 'task manager' Web 应用程序,使用 Django 1.11 和 ExtJS4 作为客户端。
每个用户创建的条目都有自己的类别。 现在我有一个问题 - 在 ExtJS 网格中,条目的每个类别显示为类别的 'id' 值。这是公平的,因为我使用外键来标识。
如何在 ExtJS 网格中显示类型字段而不是 id table?
我尝试使用 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 我正在为 ExtJS 客户端发送 JSON 格式
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',
}]
});
所以如果我做对了,现在我应该从数据库中收到一个 'category id',然后在某个地方(在服务器或客户端)将它转换为 'category type' 并显示在 extjs 网格中。 现在,你能帮我找到一个正确而优雅的方法吗?
在您的查询集上,您可以从 .values()
中的数据库中指定您想要的值,然后您将获得一个对象列表。
例如 list_of_entries = Entry.objects.all().values('headline', 'category__id', 'foo', 'bar')
看看here