繁体   English   中英

Django 使用唯一的共同值创建或更新

[英]Django Create or update with unique together values

我正在尝试在前端创建一个考勤系统我检索 request.user 可以参加的用户列表,我正在使用 CreateAPIView 但这不会得到我想要的效果,因为我想要 request.user即使在第一个请求上创建了条目之后,也能够在 Absent、Present 和 on_leave 之间切换

我在这里看到了有关创建或更新的问题和答案,但我无法使用它们,因此将获得任何帮助

这是我的观点.py

class AttendanceListCreateAPIView(CreateAPIView):
permission_classes = [IsTeacher_Student]
queryset = Attendance.objects.all()
serializer_class = AttendanceSerializer

def post(self, request, *args, **kwargs):
    user = request.user
    data = request.data

    serializer = AttendanceSerializer(data=data)
    if serializer.is_valid():
        data_user = serializer.validated_data['user']

       ## validation

    return Response({"message": "Something is wrong, maybe you have already taken attendance for this user"},
                    status=status.HTTP_400_BAD_REQUEST)

我的序列化程序.py

class AttendanceSerializer(serializers.ModelSerializer):
     date = serializers.HiddenField(default=timezone.now)
     leave_reason = serializers.CharField(required=False, default="")

     class Meta:
          model = Attendance
          fields = ['user', 'presence', 'leave_reason', 'date']
          extra_kwargs = {
               'user': {'required': True},
               'presence': {'required': True},
               'leave_reason': {'required': False},
          }
         validators = [
               UniqueForYearValidator(
                    queryset=Attendance.objects.all(),
                    field='user',
                    date_field='date',
                    message=("You have already taken the attendance")
                )
              ]

     def create(self, validated_data):
           instance = Attendance.objects.create(
              user=validated_data['user'],
              presence=validated_data['presence'],
              leave_reason=validated_data['leave_reason'],
              date=validated_data['date'],
            )
           instance.save()
           return instance

期望的效果用户 fk 和日期是唯一的,这意味着如果日期对于用户来说不是唯一的,如果它是创建一个新条目,则更新它

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM