QuerySet
遍历ManyToManyField
# Model
class Article(models.Model):
...
tags = models.ManyToManyField(ArticleTag, blank=True)
...
# Reverse
instance = Article.objects.get(pk=1)
for item in instance.tags.all():
# DO SOMETHING
Filter
Datetime
# 比当前更早
User.objects.filter(join_date__lte=datetime.now()).order_by('-join_date')
# 比三天前更早
User.objects.filter(join_date__lte=datetime.now()-timedelta(days=3)).order_by('-join_date')
Query
# model
class Album(models.Model):
id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
title = models.CharField('标题', max_length=200)
summary = models.CharField('简介', max_length=500, default='', blank=True)
author = models.ForeignKey(User, on_delete=models.CASCADE, null=True)
create_date = models.DateTimeField(auto_now_add=True)
class AlbumSubscribe(models.Model):
id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
subscriber = models.ForeignKey(User, on_delete=models.CASCADE, null=True)
album = models.ForeignKey(Album, on_delete=models.CASCADE, null=True)
create_date = models.DateTimeField(auto_now_add=True)
# query
from django.db.models import Q
class AlbumViewSet(viewsets.ModelViewSet):
queryset = Album.objects.all()
serializer_class = AlbumSerializer
authentication_classes = [TokenAuth]
# save user infomation
def perform_create(self, serializer):
serializer.save(author=self.request.user)
# query album as creator or subscriber
def list(self, request, *args, **kwargs):
qs = Album.objects.filter(Q(author=self.request.user) | Q(albumsubscribe__subscriber=self.request.user))
serializer = AlbumSerializer(qs, many=True, context={'request': request})
return Response(serializer.data)
最后更新于
这有帮助吗?