首页 > 解决方案 > 子对象的外键分配

问题描述

我有一个非常简单的问题,我无法理解。我有以下型号

class Parent(models.Model):   
     id = models.AutoField(primary_key=True)
     title = models.CharField(max_length=64)

class Child(models.Model):
      boardid = models.ForeignKey(Parent,on_delete=models.CASCADE,related_name="child")
      id = models.AutoField(primary_key=True)
      title = models.CharField(max_length=128)

序列化器

class ParentSerializer (serializers.ModelSerializer):
    class Meta:
        model = Parent
        fields = ('__all__')

class ChildSerializer (serializers.ModelSerializer):

    class Meta:
       model = Child
       fields = ('id','title')

和简单的 createAPIview 为孩子们

class ChildCreateView(CreateAPIView):
      queryset= Child.objects.all()
      serializer_class = ChildSerializer

当我调用这个 url /api/parent/1/child/create 时,我想用 id 1 预先填充外键板 id 并使用我将在 body 中提供的其余信息创建子对象。这怎么可能实现

标签: djangodjango-rest-framework

解决方案


最初,将boardid字段添加到ChildSerializer,

class ParentSerializer(serializers.ModelSerializer):
    class Meta:
        model = Parent
        fields = '__all__' # no need of "()"


class ChildSerializer(serializers.ModelSerializer):
    class Meta:
        model = Child
        fields = ('id', 'title', 'boardid')

然后,使用下面的 json 有效负载来创建实例。

{
    "title":"child title",
    "boardid":123,
    ... other data
}

推荐阅读