从 Django 中的查询集中的另一个模型获取查询集
Get a queryset from another Model in a queryset in Django
class V(models.Model):
title = models.CharField(max_length=100, blank=True, default='')
doc = models.ForeignKey(D, on_delete=models.CASCADE, default='')
upload_time = models.DateTimeField(auto_now_add=True)
class Meta:
ordering = ('upload_time',)
class D(models.Model):
name = models.CharField(max_length=100, blank=True, default='')
def __str__(self):
return self.name
在 ModelViewSet 中我这样写:
class index(viewsets.ModelViewSet):
serializer_class = VSerializer
queryset = V.objects.all()
我通过API
获得了那些数据
{
"id": 1,
"title": xxxxx
"d_id": 8,
...
...
}
不过,我想让 d_id 更具体一些,像这样:
{
"id": 1,
"title": xxxxx
"d_id": {
"id": 8,
"name": xxx,
....
}
...
...
}
所以D模型中的数据已经通过d_id=8获取并附加到原始查询集中。
我该怎么做?需要你的帮助...
为您的模型 D 创建序列化程序。
class DSerializer(serializers.ModelSerializer):
class Meta:
model = D
fields = ('field_1', 'field_2', 'field_3')
然后在您的 VSerializer 中添加一个序列化程序字段,如下所示:
class VSerializer(serializers.ModelSerializer):
d = DSerializer() # This will add D's fields in V's API.
class Meta:
model = V
fields = ('field_1', 'field_2', 'field_3')
阅读此文档了解更多详情。
http://www.django-rest-framework.org/api-guide/relations/
希望这对您有所帮助。
class V(models.Model):
title = models.CharField(max_length=100, blank=True, default='')
doc = models.ForeignKey(D, on_delete=models.CASCADE, default='')
upload_time = models.DateTimeField(auto_now_add=True)
class Meta:
ordering = ('upload_time',)
class D(models.Model):
name = models.CharField(max_length=100, blank=True, default='')
def __str__(self):
return self.name
在 ModelViewSet 中我这样写:
class index(viewsets.ModelViewSet):
serializer_class = VSerializer
queryset = V.objects.all()
我通过API
获得了那些数据{
"id": 1,
"title": xxxxx
"d_id": 8,
...
...
}
不过,我想让 d_id 更具体一些,像这样:
{
"id": 1,
"title": xxxxx
"d_id": {
"id": 8,
"name": xxx,
....
}
...
...
}
所以D模型中的数据已经通过d_id=8获取并附加到原始查询集中。
我该怎么做?需要你的帮助...
为您的模型 D 创建序列化程序。
class DSerializer(serializers.ModelSerializer):
class Meta:
model = D
fields = ('field_1', 'field_2', 'field_3')
然后在您的 VSerializer 中添加一个序列化程序字段,如下所示:
class VSerializer(serializers.ModelSerializer):
d = DSerializer() # This will add D's fields in V's API.
class Meta:
model = V
fields = ('field_1', 'field_2', 'field_3')
阅读此文档了解更多详情。 http://www.django-rest-framework.org/api-guide/relations/
希望这对您有所帮助。