gpt4 book ai didi

django - 在 Django+Django REST 中创建具有外键关系的嵌套资源

转载 作者:行者123 更新时间:2023-12-05 07:59:59 30 4
gpt4 key购买 nike

我对 Python-Django 和 web 开发还很陌生,我被困在这个使用 POST 创建新资源的特殊问题上。

我正在为 REST API 使用 Django REST 框架,我正在尝试创建一个新资源。该模型具有外键关系,我希望一次性创建相关资源。我发布了一个示例模型、序列化程序和 View ,以便我清楚我的问题。

** 我的模型有两个具有多对一关系的类。

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')

** 我尝试创建资源的 View 看起来像

@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)

** 我的输入看起来像这样,我想创建 Carmaker 资源以及嵌套的 Carmodels。

{
"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 请求中创建这种资源?提前致谢

最佳答案

我遇到过同样的事情,根据我的经验(很奇怪),如果您将这些键设置为指向已经存在的“makerkey”,它就会起作用。尝试手动创建 Carmaker,将新的“makerkey”指向上面的示例并重试 POST。

关于django - 在 Django+Django REST 中创建具有外键关系的嵌套资源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19750319/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com