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

各位前辈,大家好。
我在编写一个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 = Org

fields = ('id','name')

class InfoSerializer(serializers.ModelSerializer):

org = OrgSerializer()

class Meta:

model = Info

fields = ('id','name','ip','org','desc','type')

read_only_fields = ('org',)

def create(self, validated_data):

validated_data['org'] = self.context['request'].org

return 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提交数据如何从这个外键获取值?

回答

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

详见官方文档

read_only_fields = ('org',) 是不是不应该填这里

以上是 【Python】编写Django restful api,model表中有一个字段包含外键,前台POST提交数据如何从这个外键获取值? 的全部内容, 来源链接: utcz.com/a/80218.html

回到顶部