Django ManyToMany 通过过滤器
Django ManyToMany Through Filter
我有一个模型,它定义了可以附加到事件的类别。我正在通过直通模型跟踪类别 added/removed to/from 事件。
class ZCategory(models.Model):
name = models.CharField(max_length=8)
class ZCategoryInstanceThrough(models.Model):
category = models.ForeignKey('events.ZCategory')
event = models.ForeignKey('events.GenericModel', related_name="eventcatinstances")
added_by = models.ForeignKey('common.User', related_name="eventcatadds")
date_created = models.DateTimeField(auto_now_add=True)
date_updated = models.DateTimeField(auto_now=True)
date_removed = models.DateTimeField(null=True, blank=True) # aka 'deleted'
class GenericModel(models.Model):
data_zs = models.ManyToManyField('ZCategory', through=ZCategoryInstanceThrough, blank=True)
当我使用 .values() 在实例化的 GenericModel 查询集上调用 data_zs 时,默认情况下我不希望有任何 date_removed 未被清空的项目。
有直接的方法吗?
编辑 - 示例查询
self.eventcatinstances.filter(**filter_args).values('data_zs').annotate(count=Count('data_zs'))
试试这个:
self.eventcatinstances.filter(data_zs__date_removed__isnull=True).values('data_zs').annotate(count=Count('data_zs'))
编辑
你是否遇到同样的错误?
GenericModel.objects.filter(data_zs__date_removed__isnull=True).values('data_zs').annotate(count=Count('data_zs'))
编辑 2
如果您在过滤器中使用 zcategoryinstancethrough 作为起点会怎么样?
GenericModel.objects.filter(zcategoryinstancethrough__date_removed__isnull=True).values('data_zs').annotate(count=Count('data_zs'))
或
self.eventcatinstances.filter(zcategoryinstancethrough__date_removed__isnull=True).values('data_zs').annotate(count=Count('data_zs'))
经过进一步的尝试和错误,我意识到答案一直摆在我面前。
self.eventcatinstances.filter(
zcategoryinstancethrough__date_removed__isnull=True
zcategoryinstancethrough__isnull=False
).values(
'zcategoryinstancethrough__category'
).annotate(
count=Count('zcategoryinstancethrough__category')
)
我有一个模型,它定义了可以附加到事件的类别。我正在通过直通模型跟踪类别 added/removed to/from 事件。
class ZCategory(models.Model):
name = models.CharField(max_length=8)
class ZCategoryInstanceThrough(models.Model):
category = models.ForeignKey('events.ZCategory')
event = models.ForeignKey('events.GenericModel', related_name="eventcatinstances")
added_by = models.ForeignKey('common.User', related_name="eventcatadds")
date_created = models.DateTimeField(auto_now_add=True)
date_updated = models.DateTimeField(auto_now=True)
date_removed = models.DateTimeField(null=True, blank=True) # aka 'deleted'
class GenericModel(models.Model):
data_zs = models.ManyToManyField('ZCategory', through=ZCategoryInstanceThrough, blank=True)
当我使用 .values() 在实例化的 GenericModel 查询集上调用 data_zs 时,默认情况下我不希望有任何 date_removed 未被清空的项目。
有直接的方法吗?
编辑 - 示例查询
self.eventcatinstances.filter(**filter_args).values('data_zs').annotate(count=Count('data_zs'))
试试这个:
self.eventcatinstances.filter(data_zs__date_removed__isnull=True).values('data_zs').annotate(count=Count('data_zs'))
编辑
你是否遇到同样的错误?
GenericModel.objects.filter(data_zs__date_removed__isnull=True).values('data_zs').annotate(count=Count('data_zs'))
编辑 2
如果您在过滤器中使用 zcategoryinstancethrough 作为起点会怎么样?
GenericModel.objects.filter(zcategoryinstancethrough__date_removed__isnull=True).values('data_zs').annotate(count=Count('data_zs'))
或
self.eventcatinstances.filter(zcategoryinstancethrough__date_removed__isnull=True).values('data_zs').annotate(count=Count('data_zs'))
经过进一步的尝试和错误,我意识到答案一直摆在我面前。
self.eventcatinstances.filter(
zcategoryinstancethrough__date_removed__isnull=True
zcategoryinstancethrough__isnull=False
).values(
'zcategoryinstancethrough__category'
).annotate(
count=Count('zcategoryinstancethrough__category')
)