Как получить данные по внешнему ключу в сериализаторах Django?

Я застрял на получении данных со связанным внешним ключом. Я делаю своего рода валидацию, в которой метод create будет разрешен в зависимости от requesterid, который будет POSTed.

Это моя userTable модель:

class userTable(models.Model):
userid = models.UUIDField(primary_key=True, default = uuid.uuid4, editable=False)
username = models.CharField(max_length=50, null=False, unique=True)
userroleid = models.ForeignKey(roleTable, on_delete=models.CASCADE)

def __str__(self):
    return self.username

Другая модель - requestTable

class requestTable(models.Model):
rid = models.AutoField(primary_key=True)
requesterid =  models.ForeignKey(userTable, on_delete=models.CASCADE)
(...)

Это мой сериализатор:

class RequestCreateSerializer(serializers.ModelSerializer):
parts=PartSerializer(many=True)
class Meta:
    model = requestTable
    fields = ['rid','requesterid', (...)]

def create(self, instance, validated_data):
    if instance.requesterid.userroleid == 3:   #how can i fetch my `requesterid` data?
        parts_data = validated_data.pop('parts')
        request = requestTable.objects.create(**validated_data)
        for part_data in parts_data:
            partsTable.objects.create(request=request, **part_data)
        return request
    raise ValidationError("Sorry! Your role has no permission to create a request.")

Кроме того, я запутался, где делать валидацию - в сериализаторах или в представлениях. Если я делаю это в представлении, то оно просто выбрасывает ValidationError, и, похоже, не вводит условие if.

Для справки, вот мои взгляды:

class RequestListCreateView(ListCreateAPIView):
    queryset = requestTable.objects.all()
    serializer_class = RequestCreateSerializer

    def create(self, request, *args, **kwargs):
        if request.data.get('requesterid__userroleid') == '3':
            write_serializer = RequestCreateSerializer(data=request.data)        
            write_serializer.is_valid(raise_exception=True)
            self.perform_create(write_serializer)
            headers = self.get_success_headers(write_serializer.data)
            return Response({"Request ID": write_serializer.instance.requestid, "Parts ID": [p.partsid for p in write_serializer.instance.parts.all()]},headers=headers)
        raise ValidationError("Sorry! Your role has no permission to create a request.")

Надеюсь, кто-нибудь сможет мне помочь!

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