recherche

Maison  >  Questions et réponses  >  le corps du texte

python - En écrivant l'API Restful de Django, il y a un champ dans la table modèle qui contient une clé étrangère, comment les données de soumission POST du frontend peuvent-elles obtenir la valeur de cette clé étrangère ?

Bonjour à tous, les seniors.
J'écris une interface pour un projet Django. Je souhaite publier une table appelée info via l'interface, afin que d'autres plates-formes puissent transmettre des données à la table d'informations via cette interface.
Mais le champ org dans la table info a une relation de clé primaire et étrangère avec une autre table Org. Il ne peut obtenir que les valeurs de la table Org et ne peut pas la créer lui-même. À l'heure actuelle, je peux accéder à l'interface via l'URL et afficher toutes les informations dans le tableau d'informations. Cependant, lors de la soumission du test via POST, le champ org ne peut pas être soumis et une erreur est toujours signalée.
Je voudrais vous demander comment gérer ce champ et comment définir la méthode de création d'InfoSerializer dans serializer.py.
C'est la première fois que j'écris une API reposante. Je l'ai modifiée après en avoir tiré des leçons en ligne. Veuillez me donner vos conseils.

Ce qui suit est mon code et l'affichage de mon interface API

1.conception du modèle

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中文网2779 Il y a quelques jours805

répondre à tous(1)je répondrai

  • 给我你的怀抱

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

    Dans class Meta中添加depth = 1, puis précisez le nom du champ correspondant.

    Voir la documentation officielle pour plus de détails

    répondre
    0
  • Annulerrépondre