django ManyToManyField 序列化器
django ManyToManyField serializer
我是 django 的新手。我使用的版本是 1.11.2
我有一个这样的模式。
有很多"designs",每个设计可以有任意数量的"patterns"。
我的设计模型如下
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 会 return 设计细节及其相关产品。
我还想获得与设计相关的一系列模式。
在您的 DesignsSerializer
中,您通过名称 patterns
引用了 模式 ,而没有在您的模型中定义它。
来自 Django REST 框架 documentation:
You'll normally want to ensure that you've set an appropriate
related_name
argument on the relationship, that you can use as the
field name.
在您的 Pattern
模型中:
class Pattern(models.Model):
design_id = models.ManyToManyField(Design, related_name='patterns')
...
我是 django 的新手。我使用的版本是 1.11.2
我有一个这样的模式。
有很多"designs",每个设计可以有任意数量的"patterns"。
我的设计模型如下
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 会 return 设计细节及其相关产品。 我还想获得与设计相关的一系列模式。
在您的 DesignsSerializer
中,您通过名称 patterns
引用了 模式 ,而没有在您的模型中定义它。
来自 Django REST 框架 documentation:
You'll normally want to ensure that you've set an appropriate
related_name
argument on the relationship, that you can use as the field name.
在您的 Pattern
模型中:
class Pattern(models.Model):
design_id = models.ManyToManyField(Design, related_name='patterns')
...