Почему я получаю ошибку при попытке создать статью для дочернего пользователя?

Вот в чем проблема: Когда я пытаюсь создать статью для самого пользователя, это работает. Но когда я пытаюсь создать статью в качестве родителя дочернего пользователя, а не самого пользователя, я получаю ошибку проверки. Я пытаюсь убедиться, что родитель является аутентифицированным пользователем. Как я могу решить эту проблему?

class User(AbstractUser,PermissionsMixin):

    id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
    email = models.CharField(max_length=255,unique=True)
    username =models.CharField(max_length=40,unique=True,default='undefinedusername')
    parent = models.ForeignKey('self',on_delete=models.CASCADE,null=True, blank=True)
    
class Article(models.Model):

    id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
    author = models.ForeignKey(User,on_delete=models.CASCADE,related_name='articles')
    caption = models.CharField(max_length=250)


class ArticleCreateSerializer(serializers.ModelSerializer):

    class Meta:
        model = Article
        fields = ('id','author','caption')

    def validate(self, attrs):
        attrs = super().validate(attrs)
        if attrs['author'].id != self.context['request'].user.pk:
            raise ValidationError('Unauthorized Request')
        elif attrs['author'].parent.id == self.context['request'].user.pk:
            return attrs
        elif (attrs.get('author').parent != None) and (attrs.get('parent').id != self.context['request'].user.pk):
            raise ValidationError('Unauthorized Request')
        return attrs

Я нашел проблему. Мне пришлось изменить функции валидации таким образом:

Изменяем функцию validate на следующую:

    def validate(self, attrs):
        attrs = super().validate(attrs)
        if attrs['author'].id == self.context['request'].user.pk:
            return attrs
        elif attrs.get('author').parent.id == self.context['request'].user.pk:
            return attrs
        raise ValidationError('Unauthorized Request')

Позвольте мне объяснить, почему я столкнулся с проблемами:

Если бы любое из условий IF было истинным, а остальные ложными, я бы получил false, поэтому мне пришлось изменить проверку валидности, чтобы она проверяла все условия, а затем выдавала ошибку, если ни одно из них не совпадает.

Почему я исключил некоторые функции, очень просто:

      1-  elif attrs['author'].parent.id == self.context['request'].user.pk:
            return attrs
      2-  elif (attrs.get('author').parent != None) and (attrs.get('parent').id != self.context['request'].user.pk):
            raise ValidationError('Unauthorized Request')

Номер 1 был просто беспорядком

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

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