【发布时间】:2021-09-20 21:16:23
【问题描述】:
我目前有一个使用ModelViewSet 的SiteViewSet,它可以从模型Site 列出、检索、创建和更新站点。
我想向同一个SiteViewSet 添加一个过滤器,该过滤器列出了is_active 为True 的所有站点对象 - 但此条件基于AdminConfiguration 模型。
我无法找到如何根据另一个模型的条件在ModelViewSet 中实现过滤器。过滤的端点/v1/site/?is_active=True 是否可以在同一个SiteViewSet 中实现,或者我应该创建一个单独的视图来通过更灵活的APIView 实现这一点?
SiteViewSet:
class SiteViewSet(viewsets.ModelViewSet):
model = Site
lookup_field = 'uuid'
pagination_class = PageNumberPagination
serializer_class = SiteSerializer
queryset = Site.objects.all()
Site模特:
class Site(models.Model):
uuid = models.UUIDField(
default=uuid.uuid4,
unique=True)
domain_name = models.CharField(max_length=255, unique=True)
AdminConfiguration模特:
class AdminConfiguration(models.Model):
site = models.OneToOneField(
Site,
on_delete=models.CASCADE)
always_active = models.BooleanField(default=False)
subscription_ends = models.DateTimeField(
default=set_default_expiration)
@property
def is_active(self):
active_status = self.always_active or self.subscription_ends > timezone.now()
return active_status
【问题讨论】:
-
这两个模型的链接是什么?它们是否通过字段链接?
-
@Rvector 2 个模型共享相同的主键(Site 模型的
id)
标签: django django-models django-rest-framework django-views