Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django 基于obj类型的具有不同数据集的查询集_Django_Postgresql - Fatal编程技术网

Django 基于obj类型的具有不同数据集的查询集

Django 基于obj类型的具有不同数据集的查询集,django,postgresql,Django,Postgresql,我想在我的应用程序中实现类似instagram的本地通知。 主要问题是本地通知可以是不同的类型。例如: 1) 简单的一个:“user开始跟踪你”(这很简单) 2) 更复杂:“用户和+7其他人喜欢你的照片X” 解决方案的第一步是按目标用户、事件类型和触发事件的用户对所有通知进行分组。对于第一个案例,我们将获得所有信息,因此没有问题。对于第二种情况,我们将缺少一些关于类似通知计数的信息。另外,如果我需要一些关于同样喜欢photo X的+7用户的附加信息,该怎么办 我所尝试的: 我试着使用GROUP

我想在我的应用程序中实现类似instagram的本地通知。 主要问题是本地通知可以是不同的类型。例如:

1) 简单的一个:“
user
开始跟踪你”(这很简单)

2) 更复杂:“
用户
和+7其他人喜欢你的照片X”

解决方案的第一步是按
目标用户
事件类型
和触发事件的
用户对所有通知进行分组。对于第一个案例,我们将获得所有信息,因此没有问题。对于第二种情况,我们将缺少一些关于类似通知计数的信息。另外,如果我需要一些关于同样喜欢photo X的
+7
用户的附加信息,该怎么办

我所尝试的:

我试着使用GROUP BY,它可以用于第二种情况,但对于第一种情况并不合适。我还尝试了两个单独的查询集,其中包含了每种通知类型所需的所有数据。但是我会有一个问题,我不能合并它们,也不能使用分页。另外,如果我返回2个查询集,前端将很难按日期时间对它们进行排序

第一个查询集:

ReceivedNotification.objects.filter(用户=用户)

第二条: ReceivedNotification.objects.filter(用户=用户,通知\事件=通知。喜欢\照片)。值\列表('receiver','notification \事件')

对于这个例子,我在数据库中有两个通知

此外,我还有
ReceivedNotification
模型,其中FK给用户,FK给通知,还有数据字段(JSONField)来存储实际信息 哪个特定的用户将获得

预期结果是通过单个查询获取特定用户的所有本地通知。
某些通知应仅包含基本信息,而其他通知应包含类似通知的计数器(如果有3个以上的类似通知)以及该用户的Id列表。

问题是什么?@dirkgroten如何获取用户的所有本地通知,其中每种类型的通知都有自己的数据集?您尝试了什么?@dirkgroten我试着使用GROUP BY,它可以用于第二种情况,但对于第一种情况并不合适。我还尝试了两个单独的查询集,其中包含了每种通知类型所需的所有数据。但是我会有一个问题,我不能合并它们,也不能使用分页。另外,如果我返回2个查询集,前端将很难按日期时间对它们进行排序。请编辑您的问题,以共享您刚才提到的代码,以便我们更好地了解您的尝试和错误。
class Notification(TimeStampedModel):
    OPEN_PROFILE = 'open_profile'
    OPEN_PHOTO = 'open_photo'
    ACTION_CHOICES = (
        (OPEN_PROFILE, _('Open profile')),
        (OPEN_PHOTO, _('Open photo')),
    )

    LIKED_PHOTO = 'liked_photo'
    NEW_FOLLOWER = 'new_follower'


    EVENT_CHOICES = (
        (LIKED_PHOTO, _('Liked photo')),
        (NEW_FOLLOWER, _('New follower'))
    )
    action = models.CharField(
        max_length=255,
        choices=ACTION_CHOICES,
    )
    event = models.CharField(
        max_length=255,
        choices=EVENT_CHOICES,
    )
    title = models.CharField(
        max_length=255,
    )
    body = models.TextField()

    class Meta:
        db_table = 'notifications'