我希望我的应用程序中的所有模型都有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)
答案 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,就会添加此字段。
如果不清楚,请告诉我。