Django проверяет, имеет ли объект в методе post определенное значение

Я использую DRF и имею объект с полем ManyToMany. Я хочу проверить, содержит ли объект, который пользователь отправил на сервер, какой-либо пк в этом поле. Затем я хочу установить поле boolean в true в связанном объекте с этим ManyToMany.

Модели:

class Parent(models.Model):
    child_link = models.ManyToManyField(child, related_name="child")

class Child(models.Model):
    in_use = models.BooleanField(default=False)

Просмотров:

class ParentView(viewsets.ModelViewSet):
    serializer_class = ParentSerializer
    authentication_classes = (SessionAuthentication, )

    def get_queryset(self):
        user = self.request.user
        return Parent.objects.filter(user=user)

class ChildView(viewsets.ModelViewSet):
    serializer_class = ChildSerializer
    authentication_classes = (SessionAuthentication, )

    def get_queryset(self):
        user = self.request.user
        return Child.objects.filter(user=user)

Сериализаторы:

class ParentSerializer(serializers.ModelSerializer):

    class Meta:
        model = Parent
        fields = __all__

class ChildSerializer(serializers.ModelSerializer):

    class Meta:
        model = Child
        fields = __all__

Чтобы проверить, содержит ли объект, отправленный пользователем в представлении, определенное значение в поле ManyToMany, вы можете использовать метод .filter() на связанном менеджере поля ManyToMany, чтобы проверить, присутствует ли значение в поле. Вот пример:

from rest_framework.response import Response
from rest_framework import status

def my_view(request):
    my_object = request.data
    if my_object.my_many_to_many_field.filter(pk=my_value).exists():
        # Do something...
    return Response(status=status.HTTP_200_OK)

В этом примере представление my_view получает объект в данных запроса и извлекает значение его поля my_many_to_many_field. Затем он использует метод .filter() на связанном менеджере, чтобы проверить, присутствует ли значение в поле, и если да, то выполняет некоторое действие.

Чтобы установить булево поле в True в объектах, связанных с полем ManyToMany, вы можете использовать метод update() на связанном менеджере для обновления поля для всех объектов поля.

from rest_framework.response import Response
from rest_framework import status

def my_view(request):
    my_object = request.data
    if my_object.my_many_to_many_field.filter(pk=my_value).exists():
        my_object.my_many_to_many_field.update(my_boolean_field=True)
    return Response(status=status.HTTP_200_OK)

Вид my_view сначала проверяет, присутствует ли значение в поле ManyToMany, используя метод .filter(), и если присутствует, то использует метод .update() на связанном менеджере, чтобы установить значение поля my_boolean_field в True для всех объектов в поле.

Помните, что вам необходимо убедиться, что пользователь имеет соответствующие разрешения для обновления объектов в поле ManyToMany. Вы можете использовать классы разрешений DRF для контроля того, каким пользователям разрешен доступ и обновление этих объектов. Для получения дополнительной информации вы можете обратиться к документации DRF по разрешениям.

Вернуться на верх