J'utilise le framework djangorestframework pour fournir une interface pour le client de l'application. Maintenant, je rencontre le problème suivant. La table IWannaImages a une clé étrangère vers la table IWanna. Maintenant, lorsque je soumets les données IWanna via l'interface POST, je ne peux pas les obtenir. les informations du client POST vers la table associée IwannaImages
.Voici le contenu de validated_data, les données soumises par le client que j'ai imprimées :
{u'platform': u'ios', u'reason': u'\u5b81\u65e5\u8363\u6e7f\u7b54\u7b54\u53d1\u751f\u7684\u53d1\u7ed9\u6211\u7684', u'error_type': u'\u8f6f\u4ef6\u9519\u8bef', u'user_id': 56, u'wanna_type': u'\u7ea0\u9519\u8bef'}
D'après les résultats de l'impression, on peut voir que l'arrière-plan ne reçoit pas les données d'images transmises par le client. J'ai l'impression qu'il y a un problème avec le sérialiseur. Comment dois-je gérer l'interface ?
models.py
class IWanna(models.Model): wanna_type = models.CharField(max_length=32, verbose_name=_("I wanna type")) scene_name = models.CharField(max_length=128, null=True, blank=True, verbose_name=_("scene name")) city_name = models.CharField(max_length=128, null=True, blank=True, verbose_name=_("city name")) reason = models.TextField(null=True, blank=True, verbose_name=_("wanna reason")) user_id = models.IntegerField(verbose_name=_("user id")) platform = models.CharField(max_length=32, verbose_name=_("platform")) error_type = models.CharField(max_length=128, null=True, blank=True, verbose_name=_("error type")) image = models.ImageField(upload_to=wanna_image_upload_to, null=True, blank=True, verbose_name=_("image")) improve_type = models.CharField(max_length=32, null=True, blank=True, verbose_name=_("improve type")) class Meta: app_label = 'people' verbose_name = _("I Wanna") verbose_name_plural = _("I Wanna") def __unicode__(self): return "{}-{}".format(self.id, self.wanna_type) class IWannaImages(models.Model): iwanna = models.ForeignKey("IWanna", related_name="images", verbose_name=_("i wanna type")) image = models.ImageField(upload_to=wanna_image_upload_to, verbose_name=_("image"))
sérialiseurs.py
class IWannaSerializer(serializers.ModelSerializer): images = serializers.SerializerMethodField() class Meta: model = IWanna fields = ( "id", "wanna_type", "scene_name", "city_name", "reason", "user_id", "platform", "error_type", "images", "improve_type", "image" ) depth = 1 def validate(self, attrs): if attrs["platform"] not in ["ios", "android"]: raise ValidationError({"platform": "platform not allowed"}) return attrs def get_images(self, instance): data = IWannaImageSerializer(instance.images, many=True).data return data def create(self, validated_data): instance = super(IWannaSerializer, self).create(validated_data) try: if validated_data["images"]: # traverse images from app for i in validated_data["images"]: IWannaImages.objects.create(iwanna=instance, image=i) except Exception, e: import logging logging.warn(e.message) return instance
Class Meta a une profondeur supplémentaire = 1, donc la liste de niveau inférieur est filtrée. Essayez de la supprimer !