【问题标题】:Django REST Framework update foreign keyDjango REST Framework 更新外键
【发布时间】:2017-08-15 05:40:31
【问题描述】:

我正在尝试更新具有指标模型外键的指标组件模型实例。如果我传递指标的主键,它会返回以下错误:

不能分配“4”:“IndicatorComponent.indicator_id”必须是“Indicator”实例。

但如果我通过指标实例,我会收到以下错误:

“类型不正确。预期的pk值,收到的指标。”

型号

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',)

我能做些什么来避免这种矛盾?

【问题讨论】:

    标签: django model foreign-keys django-rest-framework serialization


    【解决方案1】:

    将foreignKey字段名修改为indicator。如果将其命名为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',)
    

    【讨论】:

    • 谢谢,已通过将 indicator_id 列的名称更改为 indicator
    猜你喜欢
    • 2016-01-09
    • 2013-10-24
    • 2017-04-14
    • 2014-03-24
    • 2019-07-02
    • 2015-03-27
    • 2021-06-25
    • 1970-01-01
    • 2019-07-27
    相关资源
    最近更新 更多