Django REST Framework 更新外键
Posted
技术标签:
【中文标题】Django REST Framework 更新外键【英文标题】:Django REST Framework update foreign key 【发布时间】: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',)
我能做些什么来避免这种矛盾?
【问题讨论】:
【参考方案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以上是关于Django REST Framework 更新外键的主要内容,如果未能解决你的问题,请参考以下文章
在序列化程序中编辑外键字段 - Django Rest Framework
Django Rest Framework:具有通用外键的可写嵌套序列化程序
python django-rest-framework 3.3.3 更新嵌套序列化程序