python - Menulis Django restful api, terdapat medan dalam jadual model yang mengandungi kunci asing, bagaimana POST bahagian hadapan boleh menghantar data mendapat nilai daripada kunci asing ini?
PHP中文网
PHP中文网 2017-05-18 10:57:29
0
1
801

Salam semua, warga emas.
Saya sedang menulis antara muka untuk projek Django Saya ingin mengeluarkan jadual yang dipanggil info melalui antara muka, supaya platform lain boleh menghantar data ke jadual maklumat melalui antara muka ini.
Tetapi medan org dalam jadual maklumat mempunyai hubungan kunci utama dan asing dengan Org jadual lain Ia hanya boleh mendapatkan nilai daripada jadual Org dan tidak boleh menciptanya sendiri. Pada masa ini, saya boleh mengakses antara muka melalui URL dan melihat semua maklumat dalam jadual maklumat Walau bagaimanapun, apabila menghantar ujian melalui POST, medan org tidak boleh diserahkan dan ralat sentiasa dilaporkan.
Saya ingin bertanya kepada anda cara mengendalikan medan ini dan bagaimana untuk menentukan kaedah penciptaan InfoSerializer dalam serializer.py.
Ini adalah kali pertama saya menulis RESTful API. Saya mengubah suainya selepas belajar daripadanya dalam talian.

Berikut ialah paparan kod dan antara muka api saya

1.reka bentuk 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))

PHP中文网
PHP中文网

认证高级PHP讲师

membalas semua(1)
给我你的怀抱

Dalam class Meta中添加depth = 1, dan kemudian nyatakan nama medan yang sepadan.

Lihat dokumentasi rasmi untuk butiran

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan