在django中按is_active布尔字段过滤

时间:2017-07-05 10:59:56

标签: python django filter

我希望我的应用程序中的所有模型都有is_active字段,当我创建api时,我想只过滤活动的并发送响应。有没有通用的方法来做到这一点?截至目前,我保留boolean字段is_active,每次检索对象时,我都会编写一个过滤器。下面是代码:

我的models.py

class Crew(models.Model):
    crew_id = models.AutoField(primary_key=True)
    crew_code = models.CharField(max_length=200, null=False, unique=True)
    crew_name = models.CharField(max_length=200, null=False)
    crew_password = models.CharField(max_length=200, null=False)
    is_active = models.BooleanField(default=True)

我的views.py

@api_view(['GET'])
def get_crews(request):
    c = Crew.objects.filter(is_active=True)
    serializer = CrewSerializer(c, many=True)
    return Response(serializer.data, status=status.HTTP_200_OK)

2 个答案:

答案 0 :(得分:4)

您可以写custom model manager

ERROR: Must specify exactly one column as HBASE_ROW_KEY

现在class IsActiveManager(models.Manager): def get_queryset(self): return super(IsActiveManager, self).get_queryset().filter(is_active=True) class Crew(models.Model): ... objects = IsActiveManager() 将仅返回is_active记录。

答案 1 :(得分:2)

您可以在mixin.py文件中编写一个类似这样的混合文件

class TimeFieldsMixin(models.Model):
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)
    active = models.BooleanField(default=True, db_index=True)
    class Meta:
        abstract = True

并在您的模型中导入此内容:

class User(TimeFieldsMixin):
     // model fields

默认情况下,只要您使用此mixin,就会添加此字段。

如果不清楚,请告诉我。