cari

Rumah  >  Soal Jawab  >  teks badan

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?

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中文网2751 hari yang lalu784

membalas semua(1)saya akan balas

  • 给我你的怀抱

    给我你的怀抱2017-05-18 10:59:29

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

    Lihat dokumentasi rasmi untuk butiran

    balas
    0
  • Batalbalas