Django - Установка атрибута ManyToMany с пустым списком и сериализация

Ниже приведен код, который устанавливает отношения tagged_users и hash_tags в Post. Он принимает тело Post и анализирует его на наличие хэштегов (любое слово, начинающееся с #) или tagged_user (любое слово, начинающееся с @). Иногда сообщение не содержит ни того, ни другого, что вызывает ошибку в этой строке request.data['tagged_users'] = tagged_users. Как решить эту проблему, чтобы можно было смириться с тем, что он выдает пустой список?

Ошибка, которую я получаю:
ValidationError({'tagged_users': [ErrorDetail(string='“[]” is not a valid UUID.', code='invalid')]})

view.py

def request_to_post_data(request):
    post_text = request.data['body']
    hash_tags_list = extract_hashtags(post_text)
    hash_tags = [HashTag.objects.get_or_create(
        hash_tag=ht)[0].hash_tag for ht in hash_tags_list]
    request.data['hash_tags'] = hash_tags

    tagged_users_list = extract_usernames(post_text)

    tagged_users = list()
    for username in tagged_users_list:
        try:
            tagged_users.append(User.objects.get(username=username).uuid)
        except User.DoesNotExist:
            pass

    request.data['tagged_users'] = tagged_users
    serializer = PostSerializer(data=request.data)
    if serializer.is_valid(raise_exception=True):
        post_obj = serializer.save()

        create_image_models_with_post(request=request, post_obj=post_obj)
        create_video_models_with_post(request=request, post_obj=post_obj)

        return serializer

serializer.py

class PostSerializer(serializers.ModelSerializer):
    hash_tags = HashTagSerializer(many=True, read_only=True)

    class Meta:
        model = Post
        fields = ('creator', 'body', 'uuid', 'created', 'type', 'updated_at', 'hash_tags', 'tagged_users')

models.py

class Post(models.Model):
    # ulid does ordered uuid creation
    uuid = models.UUIDField(primary_key=True, default=generate_ulid_as_uuid, editable=False)
    created = models.DateTimeField('Created at', auto_now_add=True)
    updated_at = models.DateTimeField('Last updated at', auto_now=True, blank=True, null=True)
    creator = models.ForeignKey(
        User, on_delete=models.CASCADE, related_name="post_creator")
    body = models.CharField(max_length=POST_MAX_LEN, validators=[MinLengthValidator(POST_MIN_LEN)])
    hash_tags = models.ManyToManyField(HashTag)
    tagged_users = models.ManyToManyField(User)

Необходимо установить blank=True на ManyToManyField тогда не добавлять в запрос, если такового не существует.

views.py

def request_to_post_data(request):
    post_text = request.data['body']
    hash_tags_list = extract_hashtags(post_text)
    hash_tags = [HashTag.objects.get_or_create(
        hash_tag=ht)[0].hash_tag for ht in hash_tags_list]

    if len(hash_tags) > 0:
        request.data['hash_tags'] = hash_tags

    tagged_users_list = extract_usernames(post_text)

    tagged_users = list()
    for username in tagged_users_list:
        try:
            tagged_users.append(User.objects.get(username=username).uuid)
        except User.DoesNotExist:
            pass

    if len(tagged_users) > 0:
        request.data['tagged_users'] = tagged_users

    serializer = PostSerializer(data=request.data)
    if serializer.is_valid(raise_exception=True):
        post_obj = serializer.save()

        create_image_models_with_post(request=request, post_obj=post_obj)
        create_video_models_with_post(request=request, post_obj=post_obj)

        return serializer

models.py

class Post(models.Model):
    # ulid does ordered uuid creation
    uuid = models.UUIDField(primary_key=True, default=generate_ulid_as_uuid, editable=False)
    created = models.DateTimeField('Created at', auto_now_add=True)
    updated_at = models.DateTimeField('Last updated at', auto_now=True, blank=True, null=True)
    creator = models.ForeignKey(
        User, on_delete=models.CASCADE, related_name="post_creator")
    body = models.CharField(max_length=POST_MAX_LEN, validators=[MinLengthValidator(POST_MIN_LEN)])
    hash_tags = models.ManyToManyField(HashTag, blank=True)
    tagged_users = models.ManyToManyField(User, blank=True)
Вернуться на верх