首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在Django+Django REST中创建具有外键关系的嵌套资源

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

Stack Overflow用户
提问于 2013-11-03 14:10:26
回答 1查看 1.7K关注 0票数 3

我对Python-Django和web dev非常陌生,我被这个使用POST创建新资源的特殊问题所困扰。

我正在使用Django REST framework for REST API,并且我正在尝试创建一个新的资源。THe模型有一个外键关系,我希望相关的资源是一气呵成的。我张贴了一个样本模型,序列化程序和视图,这样我的问题就清楚了。

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

代码语言:javascript
运行
复制
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'

**我有如下的序列化类

代码语言:javascript
运行
复制
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')

**我尝试创建资源的视图如下所示

代码语言:javascript
运行
复制
@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。

代码语言:javascript
运行
复制
{
    "makerkey": 1, 
    "makername": "lamborghini", 
    "models": [
        {
            "modelkey": 11, 
            "makerkey": 1, 
            "modelname": "reventon" 
        }, 
        {
            "modelkey": 12, 
            "makerkey": 1, 
            "modelname": "aventador" 
        }
    ]
}

**我收到的响应是

代码语言:javascript
运行
复制
{
    "models": [
        {
            "makerkey": [
                "Invalid pk '1' - object does not exist."
            ]
        }, 
        {
            "makerkey": [
                "Invalid pk '1' - object does not exist."
            ]
        }
    ]
}

有没有办法在一个POST请求中创建这种类型的资源?提前感谢

EN

回答 1

Stack Overflow用户

发布于 2013-11-22 07:01:25

我也遇到过同样的事情,根据我的经验(奇怪的是),如果你将这些键设置为指向一个已经存在的"makerkey“,它就会起作用。尝试手动创建Carmaker,将新的"makerkey“指向上面的示例,然后重试该帖子。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19750319

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档