I'm trying to show the server to the user only if the user is a moderator or the creator of the server.
so I wrote this code:
class ServerModeratingView(LoginRequiredMixin, View):
def get(self, request, server_tag):
moderator = ServerModerator.objects.get(user=request.user)
server = Server.objects.get(Q(tag=server_tag), Q(creator=request.user) | Q(moderators=moderator))
...
I thought Q object will make this code conditional like if the
request.user
is not the creator then user is a moderator.
This works fine if the user is a moderator of the server
but the creator(creator is not one of the moderators so moderator
queryset will be empty)
shows this error:
ServerModerator matching query does not exist.
models.py:
class Server(models.Model):
...
tag = models.CharField(max_length=50, unique=True)
moderators = models.ManyToManyField('ServerModerator', related_name='server')
...
class ServerModerator(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE, related_name='moderator_of')
allow_create_tag = models.BooleanField(default=True)
allow_create_rule = models.BooleanField(default=False)
allow_remove_user = models.BooleanField(default=True)
allow_remove_moderator = models.BooleanField(default=False)
allow_delete_post = models.BooleanField(default=False)