我是django的新手。我使用的版本是1.11.2
我有一个这样的架构。
有很多"设计"每个设计都可以有任意数量的"模式"。
我的设计模型如下所示
from django.db import models
from products.models import Product
class Design(models.Model):
name = models.CharField(max_length=200)
product_id = models.ForeignKey(Product, on_delete=models.CASCADE)
price = models.CharField(max_length=200)
def __str__(self):
return self.name
我的设计序列化器如下所示
from rest_framework import serializers
from .models import Design
from rest_framework import serializers
from patterns.models import Pattern
class DesignsSerializer(serializers.ModelSerializer):
patterns = DesignPatternSerializer(read_only=True, many=True)
class Meta:
depth = 1
model = Design
fields = ('id','name','patterns')
read_only_fields = ('id','name','patterns')
设计视图如下
from django.shortcuts import render
from .models import Design
from .serializers import DesignsSerializer
from rest_framework import generics, filters
# Create your views here.
class ListDesignsByProducId(generics.ListCreateAPIView):
serializer_class = DesignsSerializer
def get_queryset(self):
return Design.objects.filter(product_id__exact = self.kwargs.get('product_id'))
我的模式模型如下所示。
from django.db import models
from datetime import date
from designs.models import Design
class Pattern(models.Model):
design_id = models.ManyToManyField(Design)
name = models.CharField(max_length=200)
def __str__(self):
return self.name
我的模式序列化器如下
from rest_framework import serializers
from .models import Pattern
class PatternSerializer(serializers.ModelSerializer):
class Meta:
depth = 1
model = Pattern
fields = ('id','design_id','name')
read_only_fields =('id','design_id','name')
现在,api将返回设计及其相关产品的详细信息。 我还想获得一系列与设计相关的模式。
答案 0 :(得分:0)
在您的DesignsSerializer
中,您使用名称patterns
引用了模式,而未在模型中对其进行定义。
来自Django REST框架documentation:
您通常希望确保自己设置合适的内容 关于关系的
related_name
论证,你可以用作 字段名称。
在Pattern
模型中:
class Pattern(models.Model):
design_id = models.ManyToManyField(Design, related_name='patterns')
...