【问题标题】:I have question about Django REST Filter ID ForeignKey我对 Django REST Filter ID ForeignKey 有疑问
【发布时间】:2021-09-28 12:19:28
【问题描述】:

如何过滤部门中的Org.id

简单:

 { id: 1, name: ITDepart, description: itdeapart, org: 43}
 { id:2, name: ITDepart, description: itdeapart, org: 42 }

我有以下models.py:

组织模式:

class Organization(models.Model):
  user = models.ForeignKey(User,, on_delete=models.CASCADE, null=True)
  name = models.CharField(max_length=100, blank=True)
  description = models.TextField(max_length=500, blank=True)
  created_date = models.DateTimeField(auto_now_add=True, null=True)
  logo = models.ImageField(upload_to=upload_update_image, blank=True, null=True)
  slug = models.SlugField(blank=True)

部门型号:

class Department(models.Model):
   org = models.ForeignKey(Organization, on_delete=models.CASCADE, null=True , blank=True)
   name = models.CharField(max_length=50)
   description = models.TextField(max_length=300)
   slug = models.SlugField(max_length=100, null=True, blank=True)

我有 Serializaer:

class OrgSerializer(serializers.ModelSerializer):
   logo = Base64ImageField(max_length=None, use_url=True)
   class Meta:
    model = Organization
    fields = [
        'id',  'name', 'description','slug', 'user', 'created_date', 'logo']

class DepartmentSerailizer(serializers.ModelSerializer):

class Meta:
    model = Department
    fields = ['id', 'name', 'description', 'slug' , 'org']

我有视图集:

class OrgViewset(viewsets.ModelViewSet):
  authentication_classes = ( TokenAuthentication, )
  permission_classes = (IsAuthenticated, )
  queryset = Organization.objects.all()
  serializer_class = OrgSerializer

class DepartmentViewset(viewsets.ModelViewSet):
  authentication_classes = ( TokenAuthentication, )
  permission_classes = (IsAuthenticated,)
  queryset = Department.objects.all()
  serializer_class = DepartmentSerailizer
  lookup_field = 'pk'

【问题讨论】:

  • 您尝试了哪些方法,哪些方法不起作用?

标签: django django-rest-framework django-queryset


【解决方案1】:

您可以在模型中添加默认排序

class Organization(models.Model):
  user = models.ForeignKey(User, on_delete=models.CASCADE, null=True)
  ....

  class Meta:
     ordering = ['-pk']  # descending

或者当你过滤Department

qs = Department.objects.filter(...).order_by('org__pk')  # ascending
qs = Department.objects.order_by('org__pk')  # ascending without filter

但是,订购 django 的默认值-pk 没有意义。如果你使用的是django默认的PrimaryKey,默认已经是升序了。

【讨论】:

    猜你喜欢
    • 2021-10-29
    • 2015-10-13
    • 2020-12-30
    • 2017-02-22
    • 2019-05-06
    • 1970-01-01
    • 2020-09-19
    • 2020-01-19
    • 2020-10-17
    相关资源
    最近更新 更多