各位前輩,大家好。
我在寫一個Django專案的接口,想將一張叫info的表通過接口放出去,給另外的平台通過該接口可以向info表傳入數據。
但是info表中的org欄位與另外一張表Org是主外鍵關係,只能從Org表取值,不能自己建立。目前我已經能透過url存取接口,查看到info表的所有信息,只是在POST提交測試時,org字段無法提交,一直報錯。
我想問各位,該如何處理這個字段,該如何在serializer.py中定義InfoSerializer的建立方法。
我是第一次寫restful 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))
##
在
class Meta
中添加depth = 1
,然後指定對應的欄位名稱。詳見官方文件