2016-10-31 12 views
0

すべての情報を1つのJSONオブジェクトに保存しようとしています。関係 "establecimientos"を削除すると、エラーは発生しませんが、 "establecimientos"を含めると、次のエラーが発生します。Django TypeError: 'formas_pago'は、この関数の無効なキーワード引数です。

Error: TypeError: 'formas_pago' is an invalid keyword argument for this function

このエラーは、ライン上で発生します。私のシリアライザクラスのnegocio = Negocio.objects.create(**validated_data)

シリアライザクラス

これはserializadoraクラスの仕事で正しくこの行まで(establecimientos_data = validated_data.pop( 'establecimientos '))

class NegocioSerializer(ModelSerializer): 
    establecimientos = EstablecimientoSerializer(many=True) 

    class Meta: 
     model = Negocio 
     fields = ('id','nombre', 'slug', 'fecha_creado', 'tipos_negocio','formas_pago', 'propietario', 'establecimientos') 
     read_only_fields = ('propietario',) 

    def create(self, validated_data): 
     establecimientos_data = validated_data.pop('establecimientos') 
     negocio = Negocio.objects.create(**validated_data) 
     for establecimiento_data in establecimientos_data: 
      Establecimiento.objects.create(negocio=negocio, **establecimiento_data) 
     return negocio 

モデルクラス

class Negocio(models.Model): 
     nombre = models.CharField(max_length=255) 
     slug = models.CharField(max_length=255) 
     logo = models.FileField(upload_to=upload_logo_to) 
     fecha_creado = models.DateTimeField(auto_now=True) 
     propietario = models.ForeignKey(User) 
     tipos_negocio = models.ManyToManyField('TipoNegocio') 
     formas_pago = models.ManyToManyField('FormaPago') 

     def __str__(self): 
      return self.nombre 

     def get_establecimiento(self): 
      establecimientos = Establecimiento.objects.filter(negocio=self) 
      return establecimientos 


    class TipoNegocio(models.Model): 
     tipo = models.CharField(max_length=255) 

     def __str__(self): 
      return self.tipo 

    class Establecimiento(models.Model): 
     nombre = models.CharField(max_length=255) 
     direccion = models.TextField() 
     telefono = models.CharField(max_length=255) 
     negocio = models.ForeignKey('Negocio', related_name='establecimientos') 

     def __str__(self): 
      return u'{0} - {1}'.format(self.negocio, self.nombre) 


     def get_horarios(self): 
      horarios = Horario.objects.filter(establecimiento=self) 
      return horarios 

    class FormaPago(models.Model): 
     forma_pago = models.CharField(max_length=255) 

     def __str__(self): 
      return self.forma_pago 

JSON

{ 
     "nombre": "nuevo", 
     "slug": "nuev", 
     "tipos_negocio": [ 
      2, 
      3 
     ], 
     "formas_pago": [ 
      1 
     ], 
     "establecimientos": [{ 
         "nombre": "Matriz", 
         "direccion": "asasasas", 
         "telefono": "0997739485", 
         "horarios": [] 
        }, 
        { 
         "nombre": "bbb", 
         "direccion": "sassdd", 
         "telefono": "445588", 
         "horarios": [] 
        }] 
    } 

答えて

0

ManyToManyFieldデータは、他の分野と同様に移入することができません。彼らはフィールドに追加する必要があります。例)

formas_pago = validated_data.pop('formas_pago', []) 
formas_pago = FormaPago.objects.filter(id__in=formas_pago) 
negocio = Negocio.objects.create(**validated_data) 
negocio.formas_pago.add(*negocio) 

したがって、あなたが感謝をリスト内のすべてのオブジェクトを取得し、formas_pagoフィールド

+0

にそれを追加する必要があり、これは解決策が、なぜ彼らは唯一の多対多、ジャンゴあるときかもしれませんどのように保存するかを知っていますか?この例では、自動的に "forma_pago"が追加された場合、モデル "Negocio"の "Establecimiento"を削除します。 – user3417635

関連する問題