让我们说我们有以下模型:
class Bundle(models.Model):
# ...
class Order(models.Model):
# ...
bundle = models.ForeignKey(
Bundle, on_delete=models.CASCADE,
verbose_name=_('бандл'),
related_name='orders')
class CommentThread(models.Model):
user = models.ForeignKey(
settings.AUTH_USER_MODEL, verbose_name=_('user'),
blank=True, null=True, related_name="%(class)s_comments",
on_delete=models.SET_NULL)
content_type = models.ForeignKey(
ContentType,
verbose_name=_('content type'),
related_name="content_type_set_for_%(class)s",
on_delete=models.CASCADE)
object_pk = models.TextField(_('object ID'))
content_object = GenericForeignKey(ct_field="content_type", fk_field="object_pk")
datetime = models.DateTimeField(verbose_name=_('last time thread was read'), default=None,
null=True, blank=True)
class Comments(models.Model):
content_type = models.ForeignKey(
ContentType,
verbose_name=_('content type'),
related_name="content_type_set_for_%(class)s",
on_delete=models.CASCADE)
user = models.ForeignKey(
settings.AUTH_USER_MODEL, verbose_name=_('user'),
blank=True, null=True, related_name="%(class)s_comments",
on_delete=models.SET_NULL)
content_object = GenericForeignKey(ct_field="content_type", fk_field="object_pk")
object_pk = models.TextField(_('object ID'))
text = models.TextField(max_length=COMMENT_MAX_LENGTH)
submit_date = models.DateTimeField(_('date/time submitted'), default=None, db_index=True)
根据设计,我们可能会将评论附加到每个模型,但在这种情况下,我们会在内容类型\对象ID泛型上附加对Bundle
的评论。要为线程中的每个用户实现“读取\未读评论”,我们使用具有相同内容类型对象通用的CommentThread
模型(我知道,这是一个很糟糕的想法,但这是一种遗留代码)。
如果Bundle实例附加了comment.submit_date
>的评论comment_thread.objects.filter(user=user, content_object=bundle).datetime
这个意思是对当前用户来说是新的评论。
因此,我需要获取Orders
的列表,其中包含针对用户的新评论,按提交上次评论的时间排序,附加到Order.bundle
,每个Order
的评论数量为< / p>
问题是:ORM以正确的方式提出此请求?可能吗?