2017-03-22 21 views
0

インジケータモデルの外部キーを持つインジケータコンポーネントモデルのインスタンスを更新しようとしています。私はインジケータの主キーを渡す場合は、次のエラーを返す:Django RESTフレームワークの外部キーの更新

Cannot assign "4": "IndicatorComponent.indicator_id" must be a "Indicator" instance.

をしかし、私はインジケータインスタンスを渡すと、私は次のエラーを取得する:

"Incorrect type. Expected pk value, received Indicator."

モデル

class IndicatorComponent(models.Model): 
    indicator_component_id = models.AutoField(
     primary_key=True 
    ) 
    date = models.DateField(
     verbose_name='Fecha', 
     auto_now=False, 
     null=True 
    ) 
    indicator_id = models.ForeignKey(
     'Indicator', 
     null=True 
    ) 

    def __str__(self): 
     return self.name 

    class Meta: 
     verbose_name_plural = 'Componente Indicador' 

シリアライザ

class IndicatorComponentSerializer(serializers.ModelSerializer): 
    class Meta: 
     model = models.IndicatorComponent 
     fields = (
      'indicator_component_id', 'name', 
      'description', 'date', 'position_x', 'position_y', 
      'size_width', 'size_height', 'indicator_id', 
      'template_report_id', 'component_styles_id' 
     ) 
     read_only_fields = ('creation_date', 'last_modified_date',) 

私はこの矛盾を避けるために何ができますか?

答えて

0

インジケータにforeignKeyフィールド名を変更します。 indicator_idという名前を付けると、データベースの列の名前はindicator_id_idになります。デフォルトでは、indicator_component_idフィールドは不要です。

これを試してみてください:

class IndicatorComponent(models.Model): 
    date = models.DateField(
     verbose_name='Fecha', 
     auto_now=False, 
     null=True 
    ) 
    indicator = models.ForeignKey(
     'Indicator', 
     null=True 
    ) 

    def __str__(self): 
     return self.name 

    class Meta: 
     verbose_name_plural = 'Componente Indicador' 


class IndicatorComponentSerializer(serializers.ModelSerializer): 
    class Meta: 
     model = models.IndicatorComponent 
     fields = (
      'id', 'name', 
      'description', 'date', 'position_x', 'position_y', 
      'size_width', 'size_height', 'indicator_id', 
      'template_report_id', 'component_styles_id' 
     ) 
     read_only_fields = ('creation_date', 'last_modified_date',) 
+0

おかげで、それを指標にindicator_id列の名前を変更することで修正されました –

関連する問題