I'm trying to use CurrentUserDefault with a field that can be null:
# model
class Package(models.Model):
# User can be empty because we allow anonymous donations
owner = models.ForeignKey(
settings.AUTH_USER_MODEL,
on_delete=models.CASCADE,
null=True,
blank=True,
)
# serializer
class PackageSerializer(serializers.ModelSerializer):
owner = serializers.HiddenField(default=serializers.CurrentUserDefault())
Everything works fine when a user is logged in. However, if a user is not authenticated I get this:
ValueError at /api/organizations/village/packages/
Cannot assign "<django.contrib.auth.models.AnonymousUser object at 0x7fc97ad6d940>": "Package.owner" must be a "User" instance.
Is there a reason why CurrentUserDefault doesn't work with anonymous users?
P.S. I know I can use this instead of CurrentUserDefault and it will work:
class AuthorizedUserOrNone:
requires_context = True
def __call__(self, serializer_field):
user = serializer_field.context["request"].user
if user.is_authenticated:
return user
return None
def __repr__(self):
return "%s()" % self.__class__.__name__