Django 如何通过显式添加对象';s场?
我正在使用Django框架。我有两个模型:组件和组件属性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
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文件)。