Django 如何通过显式添加对象';s场?

Django 如何通过显式添加对象';s场?,django,django-models,django-rest-framework,django-serializer,django-fixtures,Django,Django Models,Django Rest Framework,Django Serializer,Django Fixtures,我正在使用Django框架。我有两个模型:组件和组件属性 class Component(models.Model): name = models.CharField(unique=True, max_length=255) component_properties = models.ManyToManyField(ComponentProperty) class ComponentProperty(models.Model): label = models.CharF

我正在使用Django框架。我有两个模型:组件和组件属性

class Component(models.Model):
    name = models.CharField(unique=True, max_length=255)
    component_properties = models.ManyToManyField(ComponentProperty)

class ComponentProperty(models.Model):
    label = models.CharField(unique=True, max_length=255)
    component_type = models.CharField(max_length=255)
和序列化程序:

class ComponentSerializer(serializers.ModelSerializer):
    class Meta:
        model = Component
        fields = ('name', 'component_properties')
        depth = 1

class ComponentPropertySerializer(serializers.ModelSerializer):
    class Meta:
        model = ComponentProperty
        fields = ('label', 'component_type')
我正在尝试用fixture加载数据。我编写了一个如下所示的文件:

[
   {
      "pk":1,
      "model":"api.componentproperty",
      "fields":{
         "label":"label",
         "component_type":"text"
      }
   },
   {
      "pk":2,
      "model":"api.componentproperty",
      "fields":{
         "label":"description",
         "component_type":"text",

      }
   },
   {
      "pk":1,
      "model":"api.component",
      "fields":{
         "name":"text",
         "component_properties":[
            1,
            2
         ]
      }
   }
]
干得好!但我有20个固定装置要装。我希望fixture(例如component.json)如下所示:

[
   {
      "pk":null,
      "model":"api.component",
      "fields":{
         "name":"text",
         "component_properties":[
            {
               "pk":null,
               "model":"api.componentproperty",
               "fields":{
                  "label":"label",
                  "component_type":"text"
               }
            },
            {
               "pk":null,
               "model":"api.componentproperty",
               "fields":{
                  "label":"description",
                  "component_type":"text",

               }
            }
         ]
      }
   }
]

蛋糕上的糖衣必须是指定主键的装置,如。请,有人能帮我写这些没有pk和上面描述的关系的装置吗?

据我所知,您想在
组件序列化程序中执行
组件属性的嵌套序列化

如果在
组件序列化程序中使用
组件属性序列化程序
,则可以执行此操作:

class ComponentPropertySerializer(serializers.ModelSerializer):
    class Meta:
        model = ComponentProperty
        fields = ('label', 'component_type')


class ComponentSerializer(serializers.ModelSerializer):
    # Django REST Framework supports nested serialization
    # You serialize your *component_properties* with your ComponentPropertySerializer
    # As they are many properties, you use *many=True*

    component_properties = ComponentPropertySerializer(many=True, read_only=True)

    class Meta:
        model = Component
        fields = ('name', 'component_properties')
        depth = 1

我认为这应该重现期望的输出。嵌套序列化非常有用,在中有详细的说明。

如果省略
pk
或将其设置为
null
,会发生什么情况?django.core.serializers.base.Deserialization错误:安装fixture component.json时出现问题“:[”{pk':无,'model':'api.componentproperty',fields':{'component\u type':'text','default\u value':'string','data':[],'label':'label'}}'值必须是整数。]:(api.component:pk=None)字段\值为{'pk':None,'model':'api.componentproperty','fields':{'component\u type':'text','default\u value':'string','data':[],'label':'label':'label'}“我想让fixture文件看起来像:你能把你的
serializers.py
添加到问题中吗?@wencakisa Done!谢谢你的帮助。事实上,我想做的是将初始数据加载到数据库中。我选择fixture来完成。我想做的是像上面那样创建fixture文件(第二个json文件)。