【发布时间】:2017-01-21 15:43:35
【问题描述】:
假设我有如下的 Django 模型:
class Car(models.Model):
name = models.CharField()
model = models.CharField()
type = models.CharField()
class Scooter(models.Model):
name = models.CharField()
model = models.CharField()
type = models.CharField()
class User(models.Model):
name = models.CharField()
car = models.ForeignKeyField()
scooter = models.ForeignKeyField()
序列化器如下:
class CarSerializer(serializer.ModelSerializer):
class Meta:
model = Car
fields = (
'name',
'model',
'type'
)
class ScooterSerializer(serializer.ModelSerializer):
class Meta:
model = Scooter
fields = (
'name',
'model',
'type'
)
class UservehicleCreateSerializer(serializer.ModelSerializer):
car = serializers.PrimaryKeyRelatedField(read_only=True)
scooter = serializers.PrimaryKeyRelatedField(read_only=True)
class Meta:
model = User
fields = (
'name',
'car',
'scooter'
)
所以场景是这样的:
car 数据和scooter 数据已经创建,假设两者都有pk=1。我想分别使用序列化程序创建User 数据。
但在我的情况下很难找到相同的实际资源。汽车和踏板车的数据已经存在,我不需要再次创建它。
尝试过DRF Documentation for writing serialized nested 中的内容。
Api post request的数据如下:
{
'name': "Nikhil",
'car': 1,
'scooter': 1
}
得到错误:
IntegrityError: (1048, "Column 'car_id' cannot be null")
在这件事上需要帮助。 谢谢!
【问题讨论】:
-
但是你这里没有嵌套数据,所以嵌套序列化器是错误的方法。您的用户数据包含指向相关模型主键的链接,因此您应该使用PrimaryKeyRelatedField。
-
好的理解我的方法的这一方面(我的问题)。而当我把它们变成
PrimaryKeyRelatedField时无法创建数据 -
那么你尝试了什么,你得到了什么错误?
-
@DanielRoseman 更新了问题
-
你为什么将汽车和序列化器字段设置为
read_only=True?
标签: django serialization django-rest-framework