0

표시기 모델의 외래 키가있는 표시기 구성 요소 모델의 인스턴스를 업데이트하려고합니다. 나는 표시의 기본 키를 전달하는 경우 다음과 같은 오류 반환 :Django REST Framework 외래 키 업데이트

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

외부 키 필드 이름을 표시기로 수정하십시오. 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 컬럼의 이름을 변경하여 고정 –