Jér*_*eau 2 python django post django-models django-rest-framework
我正在使用 django rest 框架构建一个 API。我有这些模型:
class Organisme(models.Model):
nom = models.CharField(max_length=255)
adresse = models.ForeignKey(Adresse, on_delete=models.CASCADE)
class Adresse(models.Model):
rue = models.CharField(max_length=255, blank=True)
Run Code Online (Sandbox Code Playgroud)
这是我的模式Organisme的视图:
class OrganismeViewSet(viewsets.ModelViewSet):
queryset = Organisme.objects.all()
serializer_class = OrganismeSerializer
pagination_class = StandardResultsSetPagination
filter_backends = (filters.SearchFilter, DjangoFilterBackend)
filter_class = OrganismeFilter
search_fields = ('nom')
Run Code Online (Sandbox Code Playgroud)
还有我的序列化器:
class OrganismeSerializer(serializers.ModelSerializer):
class Meta:
model = Organisme
fields = '__all__'
depth = 1
Run Code Online (Sandbox Code Playgroud)
所以我试图通过发送这个来创建一个新的有机体:
{
"adresse": {
"rue": "test"
},
"nom":"TestTest",
}
Run Code Online (Sandbox Code Playgroud)
或者
{
"adresse": pk_id,
"nom":"TestTest",
}
Run Code Online (Sandbox Code Playgroud)
但我总是以这个错误告终:
IntegrityError at /organismes/
(1048, "Column 'adresse_id' cannot be null")
Run Code Online (Sandbox Code Playgroud)
如果你们知道如何继续......提前谢谢你。
您需要覆盖create方法以制作可写的嵌套序列化程序:
class AddressSerializer(serializers.ModelSerializer):
class Meta:
model = Addresse
fields = ('rue',)
class OrganismeSerializer(serializers.ModelSerializer):
addresse = AddressSerializer()
class Meta:
model = Organisme
fields = '__all__'
def create(self, validated_data):
address_data = validated_data.pop('adresse')
address = Adresse.objects.create(**address_data)
organism = Organisme.objects.create(address=address, **validated_data)
return organism
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2470 次 |
| 最近记录: |