0

我与Django框架工作。我有两个模型:Component和ComponentProperty。如何通过明确添加对象的字段添加在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') 

我试图用夹具来加载数据。我写和夹具文件,看起来像这样:

[ { 
"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个装置要加载。我想有夹具(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", 
}}]}}] 

蛋糕上的糖衣必须灯具指定如here主键。请,任何人都可以帮助我写这些夹具没有派克和上述关系?

+0

如果省略'pk'或将其设置为'null'会发生什么? –

+0

django.core.serializers.base.DeserializationError:问题安装夹具component.json ':[“ '{' PK ':无, '模型': 'api.componentproperty', '字段':{' 的component_type':'文本' 'DEFAULT_VALUE': '字串', '数据':[], '标签': '标签'}}' 值必须是一个整数“]:(api.component:PK =无)FIELD_VALUE是 '{' PK ':无, '模型': 'api.componentproperty', '字段':{' 的component_type': '文本', 'DEFAULT_VALUE': '字串', '数据':[], '标签': '标签' }}' –

+0

我试图让fixture文件看起来像:[component.json](https://drive.google.com/file/d/0B30Ar7SFl-tXdkJJRTY2cnBhck0/view?usp=sharing) –

回答

1

据我了解,你要在你的ComponentSerializer执行Component properties嵌套系列化

它可以,如果你使用来完成你的ComponentPropertySerializerComponentSerializer内:

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 

我认为这应该再现所需的输出。嵌套序列化在Django REST Framework's docs中非常有用并且有详细记录。

+0

谢谢你的帮助。实际上,我想要做的是将初始数据加载到数据库中。我选择了灯具来做到这一点。我想要做的是创建像上面的夹具文件(第二个json文件)。 –

相关问题