【发布时间】:2014-07-30 09:23:04
【问题描述】:
我有以下模型和另一个 ClientWarehouse。由于某些原因,我必须通过名为 RouteInfo 的直通表创建 ManyToManyField 关系
class Route(models.Model):
user = models.ForeignKey(User)
warehouse = models.ManyToManyField(ClientWarehouse,
verbose_name='Warehouse Location',
through='RouteInfo',
blank=True, null=True)
class RouteInfo(models.Model):
route = models.ForeignKey(Route)
warehouse = models.ForeignKey(ClientWarehouse)
我有以下序列化程序类编写器
class RouteInfoSerializer(serializers.ModelSerializer):
class Meta:
model = RouteInfo
class RouteSerializer(serializers.ModelSerializer):
warehouse = serializers.PrimaryKeyRelatedField(many=True, read_only=True)
class Meta:
model = Route
以及关注视图集
class RouteViewSet(viewsets.ModelViewSet):
model = Route
def get_object(self, pk):
try:
return Route.objects.get(pk=pk)
except Route.DoesNotExist:
raise Http404
def create(self, request, format=None):
r = RouteSerializer(data=request.DATA)
if r.is_valid():
r.save()
return Response(r.data, status=status.HTTP_201_CREATED)
return Response(r.errors, status=status.HTTP_400_BAD_REQUEST)
但是,在浏览 DRF 的文档时,我发现它不支持通过表对 ManytoManyField 进行写操作。
目前,当我尝试通过 api 调用保存路由时,它不会保存客户端仓库,即未创建 RouteInfo 表,但创建的 Route 对象中没有客户端仓库。
有什么方法可以在路由表中创建路由时更新直通表,即 RouteInfo。
【问题讨论】:
标签: django serialization django-rest-framework django-orm