我是 Django(和 DjangoREST 框架)的新手,并且我一直在努力解决以下问题:
我希望“especies”(为葡萄牙语道歉......)是一个带有模型 Especies 名称的向量(请向下滚动),而是给我对应于 Especie 的 id。
"especies": [
13,
14
]
我想要,例如:
"especies": [
Z1,
Z2
]
提前致谢!
解析的 JSON:
{
"count": 1,
"next": null,
"previous": null,
"results": [
{
"codigo": "Z3",
"area": "Z_tres",
"especies": [
13,
14
],
"id": 17
}
]
}
来自 DJANGO REST 应用程序:
views.py
from django.shortcuts import render
from species.models import Especie, Zona, EspecieZona
from rest_framework import viewsets
from rest.serializers import ZonaSerializer
class ZonaViewSet(viewsets.ModelViewSet):
queryset = Zona.objects.all()
serializer_class = ZonaSerializer
序列化器.py
from species.models import Zona
from rest_framework import serializers
class ZonaSerializer(serializers.ModelSerializer):
class Meta:
model = Zona
fields = ('codigo', 'area', 'especies', 'id')
此应用中的 models.py 是空的。
来自主应用
模型.py
from django.db import models
class Zona(models.Model):
codigo = models.CharField(max_length=120)
area = models.CharField(max_length=120)
especies = models.ManyToManyField("Especie", blank=True)
def __str__(self):
return self.codigo
class Especie(models.Model):
nome = models.CharField(max_length=120)
nome_latino = models.CharField(max_length=120)
data_insercao = models.DateTimeField(auto_now_add=True)
actualizacao = models.DateTimeField(auto_now=True)
zonas = models.ManyToManyField("Zona",blank=True )
def __str__(self):
return self.nome
我相信我已经发布了这个特定案例的所有相关代码。
再次感谢!
请您参考如下方法:
模型.py
class Zona(models.Model):
codigo = models.CharField(max_length=120)
area = models.CharField(max_length=120)
especies = models.ManyToManyField("Especie", blank=True)
def __str__(self):
return self.codigo
def get_especies(self):
return self.especies.all().values_list('nome', flat=True)
序列化器.py
class ZonaSerializer(serializers.ModelSerializer):
especies = serializers.ReadOnlyField(source='get_especies')
