- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我试图显示模型中的单个实例(数据库行),其中多个实例共享多行的相同字段(列)值。为了澄清这一说法,我有以下情况:
ID/Title/Slug/Modified
1 Car A 1s ago
2 Car A 2s ago
3 House B 1s ago
如果上面的小表是我的数据库,我希望我的 Django 管理页面根据我的 slug 字段(列)显示不同的行,显示最后编辑的版本(我还有另一列时间...所以上面的表将显示在管理页面中如下:
ID/Title/Slug/Modified
1 Car A 1s ago
3 House B 1s ago
虽然第 1 行和第 2 行有不同的 pk,但它们有相同的 slug,但稍后我只想要其中一个...
我可以在我的views.py中实现这一点,如下所示
existing_data = MyModel.objects.filter(slug=slug).latest('modified')
但那是因为我正在寻找 slug 的特定实例..如果我不是,我也可以使用 group_by...
我正在尝试在管理页面中显示此内容。我在模型管理器中尝试了以下技术,
class ModelManager(models.Manager):
def get_query_set(self):
return super(ModelManager, self).get_query_set().group_by('title')
但我收到此错误
'QuerySet' object has no attribute 'group_by'
然后我在读this part of the Django book他们在模型管理器中实现了原始 SQL,我尝试将其复制到我的情况,如下所示,
class ModelManager(models.Manager):
def uniques(self):
cursor = connection.cursor()
cursor.execute("""
SELECT *
FROM eventform_event
GROUP BY slug
""")
return [row[0] for row in cursor.fetchone()]
我是我的模特
objects = ModelManager()
我只是不确定如何让管理模型查看不覆盖 get_query_set 的自定义管理器。当我使用此自定义管理器覆盖 get_query_set 时,我收到此错误
'long' object has no attribute '__getitem__'
我也尝试过测试'values()、values_list()、distinct()等,但它们都给我错误...distinct()告诉我我的数据库(mysql)不支持此功能。现在确定我是否必须切换数据库才能实现此功能,现在我没有想法可以尝试......任何人都知道如何实现此功能......谢谢。
#在我的 admin.py 页面中,我可以获得侧过滤器 (list_filter),以根据 this thread 显示基于 slug 列的唯一条目。推荐...
不幸的是,我无法让管理页面中显示的行使我的模型基于特定列是唯一的...
最佳答案
如果您将 Django 1.4+ 与 PostgreSQL 结合使用,则可以使用 queryset.distinct()带有 *fields 参数。如果您使用旧版本的 Django 或不同的数据库引擎,请告诉我,我将找到不同的方法。
如果你的模型看起来像这样:
from django.db import models
class TestModel(models.Model):
title = models.TextField(max_length=150)
slug = models.TextField(max_length=150)
modified = models.DateTimeField(auto_now=True)
然后您可以在 ModelAdmin 的 queryset
方法中执行此操作:
from django.contrib import admin
import models
class TestModelAdmin(admin.ModelAdmin):
list_display = ('title', 'slug', 'modified')
def queryset(self, request):
qs = super(TestModelAdmin, self).queryset(request)
qs = qs.order_by('slug', '-modified').distinct('slug')
return qs
admin.site.register(models.TestModel, TestModelAdmin)
希望有帮助。
编辑:好吧,如果你使用 MySQL,那就没那么整洁了。您不能使用原始 SQL,因为 Django 管理员希望使用 QuerySet 而不是 RawQuerySet。即使我们可以使用原始 SQL,它也不会像 GROUP BY slug 那么简单,因为如果你这样做,MySQL 会按照它们在表中出现的顺序给出结果。因此,如果您的数据如下所示:
+----+-------+------+---------------------+
| id | title | slug | modified |
+----+-------+------+---------------------+
| 1 | Car | A | 2013-06-30 20:18:06 |
| 2 | House | B | 2013-06-30 20:18:12 |
| 3 | Car | A | 2013-06-30 21:02:51 |
| 4 | Thing | C | 2013-06-30 22:08:00 |
| 5 | House | B | 2013-06-30 22:08:05 |
+----+-------+------+---------------------+
无论任何 order by 子句如何,按 slug 分组都会为您提供 id 1,2 和 4。我们实际上想要 ids 3、4 和 5,因为否则 Django 管理员将不会向我们显示最近修改的条目(这就是您所说的您想要的)。因此,在进行任何分组之前,我们必须从预先排序的表中进行选择。
我能想到的最好方法是将我为 PostgreSQL 提供的答案中的 queryset
方法更改为:
def queryset(self, request):
qs = super(TestModelAdmin, self).queryset(request)
qs = qs.extra(where=[
"id IN (
SELECT id FROM (
SELECT * FROM myapp_testmodel ORDER BY modified DESC
) AS last_modified
GROUP BY slug)"
])
return qs
您必须将 id
更改为表的主键名称,将 myapp_testmodel
更改为表的名称。
关于Django 管理员 : show single instance of duplicate instances,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17392433/
在下面的方法中,如何将第一个Single的结果传递给第二个Single? 如现在所写,当它返回时,somethingId 是空的。如果我将返回的 Single.just(somethingId) 中的
我发现很多帖子都在回答类似的问题(例如“如何用 / 替换 \”或“如何替换 \\” by \”。我理解所有这些,但没有一个能解决我的特殊问题。这里是: 我正在从注册表中读取路径字符串,其中包含“///
注意:事实证明,toCompletable() 并非错误,而是调用代码。调用代码使得更改此方法使其工作(或不工作)。 我有以下方法。它返回一个 Single。有用。执行内部代码,以便 remoteDa
react-native repo here 中的一个文件中有一段代码如下图: export type Operation = & {instanceID: DebugID} & (
当使用带有 Single() 的 LINQ 时,我的代码行总是带有绿色下划线,并带有建议“替换为对 single 的单一调用”。这是什么意思?下面是产生该建议的一行代码示例: var user = d
讨论来自 this answer让我好奇。哪个更快: someEnumerable.Single(predicate); 或 someEnumerable.Where(predicate).Singl
我正在使用 Keycloak 作为单点登录 (SSO) 平台的 OP。我已经将我的两个 Web 应用程序连接到 Keycloak,以便使用单点登录功能。 此外,我已经制作了一个应用程序,当注销时将被重
我的步骤是: 创建单个值 x - 可能会占用一些 CPU 资源 使用值x来执行IO操作。这已经返回 Completable 返回x 所以我想这样做: Single result =
我想知道是否有人可以阐明这个问题,什么时候使用 Single.fromCallable( ()-> myObject ) 代替 Single.just(myObject) 根据文档,Single.fr
我有两个 Singles 来源,我将它们组合成一个 Single of Pair。 假设我们对这些来源有两种方法: private Single single1() {} private Single
我想将单个 Intel CPU 内核的速度与单个 nVidia GPU 内核的速度(即:单个 CUDA 代码、单个线程)进行比较。我确实实现了以下简单的二维图像卷积算法: void convoluti
我在实现 Ping Federate 时遇到此问题 Error - Single Sign-On Single sign-on authentication was unsuccessful (ref
我有几个 api 调用(Rx singles),我想将它们组合成一个 Single。我正在使用 Single.merge 尝试合并这些调用的结果,但是当我订阅响应时,我得到一个空数组,因为订阅已经发生
早上好。我的代码有问题 bootsfaces 。我需要我的 DataTable 支持单行选择,但不支持多行选择。但是,我的表格始终只使用多项选择。 这是我的代码: 我没有进行简单的选择,因为我引用了
我怎样才能像下面的代码那样使用字符串。 $str = 'Is yo"ur name O'reil"ly?'; 上面的代码只是一个例子..我需要使用包含单引号和双引号的大 html 模板。我尝试了 Ad
我有一组地理空间+时间数据和一些附加属性,我将在 map 上显示这些数据。该集合目前有几百万份文件,并且会随着时间的推移而增加。 每个文档都有以下字段: 位置:[geojson 对象] 日期:[日期对
我目前在 .NET 2.0 下使用 SharpZipLib,通过它我需要将单个文件压缩为单个压缩存档。为此,我目前正在使用以下内容: string tempFilePath = @"C:\Users\
我有 table create table1( column1 number(10, column2 number(10), column3 number(10) ); column1是主
考虑下面这段代码,我正在尝试使用 Executors.newFixedThreadPool(1).asCoroutineDispatcher()创建单线程调度程序;我想要 launch(singleT
我面临着困惑,举个例子 4 Single: val s1 : Single = service1.execute().subscribeOn(io()) val s2 : Single = servi
我是一名优秀的程序员,十分优秀!