我对Python-Django和web dev非常陌生,我被这个使用POST创建新资源的特殊问题所困扰。
我正在使用Django REST framework for REST API,并且我正在尝试创建一个新的资源。THe模型有一个外键关系,我希望相关的资源是一气呵成的。我张贴了一个样本模型,序列化程序和视图,这样我的问题就清楚了。
**我的模型有两个具有多对一关系的类。
class Carmodel(models.Model):
modelkey = models.BigIntegerField(primary_key=True)
makerkey = models.ForeignKey('Carmaker', db_column='makerkey', related_name='models')
modelname = models.CharField(max_length=1024)
class Meta:
db_table = 'carmodel'
class Carmaker(models.Model):
makerkey = models.BigIntegerField(primary_key=True)
makername = models.CharField(max_length=1024)
class Meta:
db_table = 'carmaker'
**我有如下的序列化类
class CarmodelSerializer(serializers.ModelSerializer):
class Meta:
model = Carmodel
fields = ('modelkey','makerkey','modelname')
class CarmakerSerializer(serializers.ModelSerializer):
models = CarmodelSerializer(many=True)
class Meta:
model = Carmaker
fields = ('makerkey','makername','models')
**我尝试创建资源的视图如下所示
@api_view(['POST'])
def carmaker(request, makerkey, format=None):
if request.method == 'POST':
serializer = CarmakerSerializer(data=request.DATA)
if serializer.is_valid():
serializer.save()
return Response(serializer.data, status=status.HTTP_201_CREATED)
else:
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
**我的输入如下所示,我想要创建汽车制造商资源和嵌套的Carmodel。
{
"makerkey": 1,
"makername": "lamborghini",
"models": [
{
"modelkey": 11,
"makerkey": 1,
"modelname": "reventon"
},
{
"modelkey": 12,
"makerkey": 1,
"modelname": "aventador"
}
]
}
**我收到的响应是
{
"models": [
{
"makerkey": [
"Invalid pk '1' - object does not exist."
]
},
{
"makerkey": [
"Invalid pk '1' - object does not exist."
]
}
]
}
有没有办法在一个POST请求中创建这种类型的资源?提前感谢
发布于 2013-11-22 07:01:25
我也遇到过同样的事情,根据我的经验(奇怪的是),如果你将这些键设置为指向一个已经存在的"makerkey“,它就会起作用。尝试手动创建Carmaker,将新的"makerkey“指向上面的示例,然后重试该帖子。
https://stackoverflow.com/questions/19750319
复制相似问题