我正在做一个项目。我有Django作为我的后端和Vue作为我的前端。当使用模板和保存在Django项目中时,我没有问题。
然而,当我POST到我的项目API时,没有创建以下来自我的模态的保存。
型号.py
class DevProjects(models.Model):
PROJECT_TYPE = [
('New Application', 'New Application'),
('Update Application', 'Update Application'),
('Bug Fixes', 'Bug Fixes')
]
PROJECT_STATUS = [
('New', 'New'),
('In Progress', 'In Progress'),
('Complete', 'Complete'),
]
project_id = models.CharField(max_length=15, editable=False, unique=True)
project_title = models.CharField(max_length=100)
project_desc = models.CharField(max_length=500)
project_category = models.CharField(max_length=25, choices=PROJECT_TYPE, null=True, blank=True)
project_status = models.CharField(max_length=25, choices=PROJECT_STATUS, default='New')
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateField(auto_now=True)
created_by = models.ForeignKey(User, related_name='projects', on_delete=models.CASCADE)
def save(self, *args, **kwargs):
super(DevProjects, self).save(**kwargs)
self.project_id = 'PROJ-' + str(self.id)
super(DevProjects, self).save(**kwargs)
def __str__(self):
return self.project_title
我在保存时创建了project_id
,它获得了原始ID,但只是在前面添加了“PROJ-”。每当我从前端提交表单时,保存定义不会被调用,因此不会创建project_id
。
项目ID是我用来发送GET请求以获取项目的ID。
序列化程序.py
class DevProjectSerializer(serializers.ModelSerializer):
class Meta:
model = DevProjects
fields = ("project_id", "project_title", "project_desc", "project_category", "project_status")
查看次数.py
class DevProjectViewSet(viewsets.ModelViewSet):
serializer_class = DevProjectSerializer
queryset = DevProjects.objects.all()
def perform_create(self, serializer):
serializer.save(created_by=self.request.user)
每当我发帖时,我都会收到以下错误:
IntegrityError: UNIQUE constraint failed: ckcSupportWeb_devprojects.project_id
**当从DRF POST时,我需要为project_id
生成什么?**感谢任何帮助。
更新
我可以尝试在视图集中使用以下代码:
def create(self, *args, **kwargs):
self.project_id = 'PROJ-' + str(self.id)
super(DevProjectViewSet, self).save(**kwargs)
但是,我得到了以下错误:
self.project_id = 'PROJ-' + str(self.id)
AttributeError: 'DevProjectViewSet' object has no attribute 'id'
我真的很纠结于如何处理API发布请求。
3条答案
按热度按时间u0njafvf1#
据我所知,您可以放松对
project_id
的唯一性约束,之前的代码应该可以正常工作。由于项目代码是不可编辑的,因此它不会从POST API调用中更新。
uajslkp62#
我能够通过在www.example.com中编写一个简单的函数来解决所有这些问题utils.py,该函数获取创建的最新ID,加1,然后设置新的
project_id
。qhhrdooz3#
尝试使用此代码片段