【问题标题】:Add warning message in django-rest-framework在 django-rest-framework 中添加警告消息
【发布时间】:2017-09-05 02:19:20
【问题描述】:

我是 django-rest-framework 的新手。我正在构建一个员工调度应用程序,其中我有一个用 drf 和 angular 前端构建的 REST Api。下面是我的一个模型,它是对应的序列化器和视图集。

型号:

class Eventdetail(models.Model):
    event = models.ForeignKey(Event, models.DO_NOTHING, blank=True, null=True)
    start = models.DateTimeField(blank=True, null=True)
    end = models.DateTimeField(blank=True, null=True)
    employee = models.ForeignKey(Employee, models.DO_NOTHING, blank=True, null=True)
    location = models.ForeignKey(Location, models.DO_NOTHING, blank=True, null=True)
    is_daily_detail = models.BooleanField

    def __str__(self):
        return self.event

序列化器:

class LocationTrackSerializer(serializers.ModelSerializer):

     def __init__(self, *args, **kwargs):
         many = kwargs.pop('many', True)
         super(LocationTrackSerializer, self).__init__(many=many, *args, **kwargs)

     location = serializers.SlugRelatedField(slug_field='location_name', queryset=Location.objects.all())
     location_color = serializers.CharField(source='location.location_color', read_only=True)

     class Meta:
          model = Eventdetail
          fields = ('id','employee','location','location_color','start','end')

视图集:

class LocationTrackViewSet(viewsets.ModelViewSet):
    queryset = Eventdetail.objects.all()
    serializer_class = LocationTrackSerializer

    def create(self, request, *args, **kwargs):
        self.user = request.user
        listOfThings = request.data['events']

        serializer = self.get_serializer(data=listOfThings, many=True)
        if serializer.is_valid():
            serializer.save()
            headers = self.get_success_headers(serializer.data)
            return Response(serializer.data, status=status.HTTP_201_CREATED,
                        headers=headers)

        return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)

如您所见,这会公开所有员工的事件详细信息。现在,当发布新事件时,我希望能够找到已发布事件的开始和结束时间是否与现有事件重叠,并在创建后抛出一条包含重叠事件信息的警告消息。我仍然想允许保存,但只在保存后返回警告。我正在想办法做到这一点。我研究了如何创建验证器,但我不确定我是否应该这样做。任何帮助表示赞赏!谢谢。

【问题讨论】:

  • 警告是什么意思?附加数据以及序列化数据,是这样吗?
  • @SachinKukreja 对不起,是的,我就是这个意思。如果新发布的活动与现有活动的日期重叠,则显示“与现有活动重叠”的消息字段

标签: django django-rest-framework


【解决方案1】:

您可以向序列化程序添加字段warning_message,如下所示 -

class LocationTrackSerializer(serializers.ModelSerializer):
    # rest of the code

    def get_warning_message(self, obj):
        warning_msg = ''

        # logic for checking overlapping dates
        # create a method `are_dates_overlapping` which takes
        # start and end date of the current obj and checks with all
        # others in queryset.
        overlap = are_dates_overlapping(obj.start, obj.end)
        if overlap:
            warning_msg = 'overlaps'

        return warning_msg

    warning_message = serializers.SerializerMethodField(read_only=True)

    class Meta:
        model = Eventdetail
        fields = ('id','employee','location','location_color','start','end', 'warning_message')

参考:Serializer Method Field in DRF

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-10-27
    • 2020-12-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多