python - 如何仅更新 drf 中的字段
问题描述
我正在尝试更新我的模型的一个字段,我正在尝试为此使用补丁,但我是 django rest 的新手,我认为我有问题
我尝试使用 partial_update 方法但不起作用。我想要取消的更新状态(取消在我的 enums.py 中)
这是我模型的一部分
class Aula(AcademicoBaseModel, permissions.AulaPermission):
turma_disciplina = models.ForeignKey(TurmaDisciplina, models.PROTECT, related_name='lessons')
data_inicio = models.DateTimeField(db_index=True)
data_termino = models.DateTimeField()
duracao = models.IntegerField(default=50)
status = models.ForeignKey('Status', models.PROTECT, default=1)
这是我的看法
class CancelLessonView(generics.UpdateAPIView):
serializer_class = serializers.AulaSerializer
def patch(self, request, *args, **kwargs):
lesson = self.kwargs.get('id')
instance = models.Aula.objects.get(id=lesson)
instance.status_id = enums.StatusEnum.CANCELLED
serializer = serializers.AulaSerializer(data=request.data, partial=True)
serializer.is_valid(raise_exception=True)
instance.save()
return Response(serializer.data)
这是我的模特状态
class Status(models.Model):
name = models.CharField(max_length=50, db_column='nome')
color = models.CharField(max_length=7, db_column='cor')
ignore_in_attendance_report = models.BooleanField(default=False)
allow_attendances = models.BooleanField(default=True)
allow_activities = models.BooleanField(default=True)
我的枚举.py
class StatusEnum:
NOT_SENT = 1
PENDING = 2
SENT = 3
CONTENT_PENDING = 4
CANCELLED = 5
解决方案
首先,我建议始终使用英文名称 - 其他程序员更容易理解您的代码。
关于状态,如果您想要非常简单的解决方案,我建议将状态更改为简单的布尔字段,您可以使用 instance.status = False 或 True。
为什么要使用 ForeignKey 来显示状态?Status 模型是什么样的?
编辑
我的做法是将 services.py 文件添加到我创建服务的每个 django 应用程序中,在您的示例中,可以说 AulaService。在这个类中你可以定义方法:
# lesson == Aula
update_lesson_status(self, lesson_id, status_id):
Aula.objects.filter(id=lesson_id).update(status_id=status_id)
并且您可以在任何地方使用服务(但首先要记住导入服务),在您的示例中您可以在视图中调用服务:
class CancelLessonView(generics.UpdateAPIView):
serializer_class = serializers.AulaSerializer
def patch(self, request, *args, **kwargs):
lesson = self.kwargs.get('id')
AulaService().update_lesson_status(lesson_id=lesson,
status_id=enums.StatusEnum.CANCELLED
干杯,芬里尔
推荐阅读
- css - 除了第一行的最后一列之外的所有地方的 CSS GRID 内容
- php - 通过 php-odbc 连接时如何修复编码?
- c# - 我想比较两个字符串并希望得到可能的匹配项
- powershell - Powershell变量初始化影响函数返回?
- android - 在 Flutter 中将重复列表值转换为 DISTINCT
- json - 使用 JQ 将 Geojson 与 json 字段附加
- python - 模板不存在即使所有事情都正确也不起作用
- python - 简单循环中的意外列表丢失
- powershell - power shell 中的日期计算
- firebase - 在 firebase 中重新部署相同的 Cloud Function 是否会占用额外的空间?