python - Comment Django ModelSerializer POST soumet-il des champs qui ne sont pas définis dans les modèles ou dans les tables associées ?
女神的闺蜜爱上我
女神的闺蜜爱上我 2017-06-22 11:51:46
0
1
947

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
女神的闺蜜爱上我
女神的闺蜜爱上我

répondre à tous (1)
刘奇
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

Class Meta a une profondeur supplémentaire = 1, donc la liste de niveau inférieur est filtrée. Essayez de la supprimer !

    Derniers téléchargements
    Plus>
    effets Web
    Code source du site Web
    Matériel du site Web
    Modèle frontal
    À propos de nous Clause de non-responsabilité Sitemap
    Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!