Esc*_*her 2 python django django-rest-framework
我注意到,这个Django的REST框架提交打破了我的项目时,从升级3.6.3
到3.7.0
。这是现在已损坏的模型的相关部分:
class MarketingPlan(models.Model):
promotion = models.ForeignKey(Promotion, null=True)
class MarketingPlanSerializer(serializers.ModelSerializer):
promotion = serializers.CharField(
source='fk_promotion.id',
read_only=False,
allow_null=True)
class Meta:
model = MarketingPlan
fields = ('promotion',)
Run Code Online (Sandbox Code Playgroud)
访问data
此序列化程序的属性,当Promotion
外键为None
>> mp = MarketingPlan.objects.first()
>> MarketingPlanSerializer(mp).data
rest_framework/fields.py", line 100, in get_attribute
instance = getattr(instance, attr)
AttributeError: 'NoneType' object has no attribute 'id'
Run Code Online (Sandbox Code Playgroud)
因此,虽然get_attribute
过去常常跳过None
,但现在它会在我的特定情况下搜索.id
相关字段的属性promotion
,即使它是None
.
有什么解决方法?
当然,您需要为序列化程序的相关字段显式设置默认值:
class MarketingPlanSerializer(serializers.ModelSerializer):
promotion = serializers.CharField(
source='fk_promotion.id',
read_only=False,
allow_null=True,
default=None)
class Meta:
model = MarketingPlan
fields = ('promotion',)
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
846 次 |
最近记录: |