[英]Django - How to query a list inside of a filter method
我是 Django 的新手,我想查詢 object 內的列表。 我有一個Batch
列表,每個批次都有一個BatchComment
列表。 它們都有一個User
屬性。 我想要做的是獲得用戶有評論的批次,並且只獲得用戶沒有發表最后評論的批次。 我怎樣才能做到這一點?
目前我正在檢索用戶通過Batch.objects.filter(comments__user=self.request.user)
發表評論的批次
我想要Batch.objects.filter(comments__user=self.request.user).filter(comments_last__user.=self.request.user)
這是我的模型:
class Batch(TimeStampMixin):
note = models.TextField(max_length=1000)
image_url = models.URLField()
class Meta:
db_table = 'batches'
ordering = ['-created_at']
class BatchLogComment(TimeStampMixin):
body = models.TextField(max_length=500)
batch = models.ForeignKey(Batch, on_delete=models.CASCADE, related_name='comments')
user = models.ForeignKey(
User, on_delete=models.SET_NULL, blank=True, null=True, related_name='comments')
class Meta:
db_table = 'batch_log_comments'
ordering = ['-created_at']
我們可以使用子查詢來獲取最后一個用戶,然后進行相應的過濾:
from django.db.models import OuterRef, Subquery, Q
Batch.objects.annotate(
last_user=Subquery(
BatchLogComment.objects.filter(
batch=OuterRef('pk')
).order_by('-created_at').values('user')[:1]
)
).filter(
~Q(last_user=self.request.user),
comments__user=self.request.user
)
context=None
batch = Batch.objects.filter(comments__user_id=request.user.id).distinct()
batchlogcomment = BatchLogComment.objects.filter(batch__in=a)
c = BatchLogComment.last()
if c.user != request.user:
context.update({'c':c})
首先我得到批次 model 對象,它是與當前用戶相關的評論
然后我得到第一個查詢(批處理)中的 BatchLogComment model 對象
然后得到這些評論中的最后一條
最后檢查當前用戶是否未評論最后一條評論並更新上下文
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.