Maison > Questions et réponses > le corps du texte
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.
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))
给我你的怀抱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