您的位置:首页技术文章
文章详情页

python - 编写Django restful api,model表中有一个字段包含外键,前台POST提交数据如何从这个外键获取值?

【字号: 日期:2022-07-08 11:37:08浏览:102作者:猪猪

问题描述

各位前辈,大家好。我在编写一个Django项目的接口,想将一张叫info的表通过接口放出去,给另外的平台通过该接口可以向info表传入数据。但是info表中的org字段与另外一张表Org是主外键关系,只能从Org表取值,不能自己创建。目前我已经能通过url访问接口,查看到info表的所有信息,只是在POST提交测试时,org字段无法提交,一直报错。我想问问各位,该如何处理这个字段,该如何在serializer.py中定义InfoSerializer的创建方法。我是第一次编写restful api,都是在网上借鉴后修改的,请多多指教。

下面是我的代码和api接口展示

1.model设计

class Org(models.Model): name = models.CharField(verbose_name=u'组织单元', max_length=50) other = models.CharField(verbose_name=u'备注', max_length=30) class Info(models.Model): datetime = models.DateTimeField(verbose_name=u'时间',default=datetime.now) name = models.CharField(verbose_name=u'主机名称', max_length=50) ip = models.CharField(verbose_name=u'主机地址', max_length=20) org = models.ForeignKey(Org, verbose_name=u'所属单元') desc = models.CharField(verbose_name=u'故障描述', max_length=200) type = models.CharField(verbose_name=u'故障等级', choices=((u'严重',u'严重'),(u'告警',u'告警'),(u'提醒',u'提醒')), max_length=2)

2.serializers.py

class OrgSerializer(serializers.ModelSerializer): class Meta:model = Orgfields = (’id’,’name’)class InfoSerializer(serializers.ModelSerializer): org = OrgSerializer() class Meta:model = Infofields = (’id’,’name’,’ip’,’org’,’desc’,’type’)read_only_fields = (’org’,) def create(self, validated_data):validated_data[’org’] = self.context[’request’].orgreturn Info.objects.create(**validated_data)

3.views.py

class OrgViewSet(viewsets.ModelViewSet): queryset = Org.objects.all() serializer_class = OrgSerializer permission_classes = (permissions.IsAuthenticated,)class InfoViewSet(viewsets.ModelViewSet): queryset = Info.objects.all() serializer_class = InfoSerializer permission_classes = (permissions.IsAuthenticated,) @detail_route(renderer_classes=[renderers.StaticHTMLRenderer]) def plaintext(self, request, *args, **kwargs):model = self.get_object()return Response(repr(model))

python - 编写Django restful api,model表中有一个字段包含外键,前台POST提交数据如何从这个外键获取值?

python - 编写Django restful api,model表中有一个字段包含外键,前台POST提交数据如何从这个外键获取值?

问题解答

回答1:

在class Meta中添加depth = 1,然后指定相应的字段名。

详见官方文档

标签: Python 编程