【发布时间】:2022-06-25 20:33:12
【问题描述】:
我正在尝试在 Django Rest Framework 中创建三个模型嵌套对象。
models.py:
class Project(models.Model):
project_id = models.AutoField(primary_key=True, unique=True)
project_name = models.CharField(max_length=100)
class ProjectSite(models.Model):
site_id = models.AutoField(primary_key=True, unique=True)
site_name = models.CharField(max_length=200,name='project_site_name')
project_id = models.ForeignKey(Project, on_delete=models.CASCADE, blank=True, null=True,
related_name="projectid")
class Assignment(models.Model):
assignment_id = models.AutoField(primary_key=True)
assignment_name = models.CharField(max_length=150)
site_id = models.ForeignKey(ProjectSite,related_name="projectsiteidkey", on_delete=models.CASCADE)
assigned_to_id = models.ForeignKey('auth.User',related_name="assignedtoidfkey",on_delete=models.CASCADE)
serializer.py:
class ProjectSerializer(serializers.ModelSerializer):
class Meta:
model = Project
fields = '__all__'
class ProjectSiteSerializer(serializers.ModelSerializer):
class Meta:
model = ProjectSite
fields = '__all__'
class AssignedUserSerializer(serializers.ModelSerializer):
class Meta:
model = Assignment
fields = '__all__'
class CreateNewProjetSerial(serializers.ModelSerializer):
site_name = ProjectSiteSerializer(many=True)
assigned_to_id = AssignedUserSerializer(many=True)
class Meta:
model = Project
fields = ['site_name','project_name','assigned_to_id']
def create(self, validated_data):
site_name = validated_data.pop('site_name')
assigned_to_id = validated_data.pop('assigned_to_id')
projects = Project.objects.create(**validated_data)
for i in site_name:
ProjectSite.objects.create(site_name=projects, **i)
for j in assigned_to_id:
Assignment.objects.create(assigned_to_id=projects, **j)
return projects
view.py:
class MultieCreateAPIView(generics.CreateAPIView):
queryset = Project.objects.all()
serializer_class = CreateNewProjetSerial
我想发布一个这样的 JSON 对象:
{
"site_name": [{"site_name": "site1"}, {"site_name": "site2"}],
"project_name": "test_project",
"assigned_to_id": [{"assigned_to_id":2}, {"assigned_to_id":3}]
}
当我尝试发布此内容时,出现“无法分配“
【问题讨论】:
-
Assignment模型中的site_id字段是ProjectSite模型的外键是否正确? -
是的,没错
-
您想使用上传的站点名称和
Assignment对象创建两个ProjectSite对象。而Assignment对象将需要ProjectSite数据作为外键。但你没有提到这一点。关于哪一个将是新创建的Assignment的site_id。 -
对不起,我没看懂,请您更改模型。
-
看,
Assignment模型有ProjectSite外键,对吧?
标签: python django django-models django-rest-framework django-serializer