tim*_*tim 19 python django django-rest-framework
models.py:
class Car():
producer = models.ForeignKey(Producer, blank=True, null=True,)
color = models.CharField()
car_model = models.CharField()
doors = models.CharField()
Run Code Online (Sandbox Code Playgroud)
serializers.py:
class CarSerializer(ModelSerializer):
class Meta:
model = Car
fields = Car._meta.get_all_field_names()
Run Code Online (Sandbox Code Playgroud)
所以,我想在这里使用所有字段.但是我有一个错误:
字段名称producer_id对于模型无效Car.
如何解决?
谢谢!
Mic*_*l B 53
根据Django REST Framework的ModelSerializers文档:
默认情况下,类上的所有模型字段都将映射到相应的序列化程序字段.
这与Django的ModelForms不同,后者要求您指定特殊属性'__all__'以利用所有模型字段.因此,所有必要的是声明模型.
class CarSerializer(ModelSerializer):
class Meta:
model = Car
Run Code Online (Sandbox Code Playgroud)
上述行为在版本3.3中已弃用,并且自版本3.5以来被禁止.
现在必须使用special属性'__all__'来使用Django REST Framework中的所有字段,与Django Forms相同:
未能设置字段或排除在版本3.3中引发了挂起的弃用警告,并在3.4中引发了弃用警告.它的使用现在是强制性的.
所以现在必须是:
class CarSerializer(ModelSerializer):
class Meta:
model = Car
fields = '__all__'
Run Code Online (Sandbox Code Playgroud)
您可以使用fields = '__all__'获取所有字段,也可以指定是否要返回有限数量的字段。请参阅文档。
但这会返回id外键字段的值,即producer在您的情况下。要获取 的所有字段producer,您还需要为此创建一个序列化程序类。见这里。
所以你更新的serializers.py应该是:
class ProducerSerializer(ModelSerializer):
class Meta:
model = Producer
class CarSerializer(ModelSerializer):
producer= ProducerSerializer(read_only=True)
class Meta:
model = Car
fields = ('producer', 'color', 'car_model', 'doors', )
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
23137 次 |
| 最近记录: |