Django的REST的API多对多的JSON
送我使用Django,其余的框架,我尝试创建的Django模型的方法,可以返回其他对象信息,以serializers.py serializers.pyDjango的REST的API多对多的JSON
class MySerializer(serializers.ModelSerializer):
performer = PerformerSerializer(
source='get_performers',
read_only=True,many=True
)
class Meta:
model = Master
fields = ('first_name', 'performer')
class Stream(models.Model):
master = models.ForeignKey('Master', null=True, default=None)
class Catalog(models.Model):
performer = models.ForeignKey('Performer', blank=True)
stream = models.ForeignKey('Stream', null=True, default=None)
class Performer(models.Model):
name = models.CharField(max_length=255)
class Master(models.Model):
first_name = models.CharField(max_length=255)
def get_performers(self):
streams = Stream.objects.filter(master=self)
catalogs = Catalog.objects.filter(stream__in=streams).order_by('-datetime')[:10]
catalogs = reversed(catalogs)
performers = Performer.objects.filter(catalog__in=catalogs)
return performers
我得到error.By休息apy我得到等于对象,但它是错误的。
{
"first_name": "Master",
"performer": [
{
"id": 1,
},
{
"id": 1,
}
}
您可以使用property
装饰你的模型方法,并在ModelSerializer
使用它,
def get_performers(self):
streams = Stream.objects.filter(master=self)
catalogs = Catalog.objects.filter(stream__in=streams).order_by('-datetime')[:10]
catalogs = reversed(catalogs)
performers = Performer.objects.filter(catalog__in=catalogs).distinct()
return performers
它不是JSON可序列化 –
你是否在'ModelSerializer'中使用它? – zaidfazil
是的,我用它与2个变种。发送列表和查询。在查询变体中,我看到了表演者,但没有什么不同。表演者是平等的,但它是错误的 –
为什么你不能只发送目录和呼叫表演在前端像{{singlecatalog.performer.name }}或者你可以使用catalogs.objects.values('performer.name')发送值列表 – Vaibhav
@Vicmathur因为我使用rest-api并且不混合前后端 –
如果你使用的是django rest框架,那么它可以使用序列化器完成..如果你使用的是DRF,那么我可以给你一个例子.. – zaidfazil