Уникальные значения полей для каждого пользователя, проверка пользовательских полей

#django #django-rest-framework

Вопрос:

У меня есть модель, в которой пользователи могут иметь повторяющиеся значения, но у каждого пользователя могут быть только уникальные значения.

Например:

  • Пользователь A может иметь значение 1, значение 2, значение 3, все уникальные значения.
  • Пользователь B может иметь значение 1, значение 3, значение 4, опять же все уникальные значения.

Таким образом, оба пользователя могут иметь значение 1, но ни пользователь A, ни пользователь B не могут иметь несколько значений1 (повторяющиеся значения)

Поэтому я не могу сделать что-то подобное в модели (установка unique = true)

 class ABC(models.Model):
    field1 = models.EmailField(unique=True)
 

Каков наилучший способ проверки такого случая?

На данный момент я проверяю значения в базе данных на соответствие значению, которое я передаю во время метода создания моего views.py. И ищу любой лучший подход для использования в валидаторах сборки из фреймворка rest.

 class abc_viewset(viewsets.ModelViewSet):
    queryset = abc.objects.all()
    serializer_class = abc_serializer
    def create(self, request, format=None):
        data = request.data
        serializer = self.get_serializer(data=request.data)
        self.field1=data['field1'] 
        self.prevValues=abc.objects.filter(field1=self.field1,user=request.user)
                        .values_list('field1',flat=True)
        if self.prevValues:
            return Response({"Failure":"Duplicate value"})
        if serializer.is_valid():
            serializer.save()
 

Комментарии:

1. вам нужно использовать unique_together для вашего пользователя и field.docs.djangoproject.com/en/3.2/ref/models/options /…