Django Путаница в отношениях между полями ManyToMany

Я использую Django 3.2

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

Я, кажется, запутался в отношениях ManyToMany. Вот что у меня есть на данный момент (отредактировано):

class Community(models.Model):
    pass

# Group of administrators responsible for moderation and membership approvals
# (for restricted and private communities)
# Note: administrators can autopost and delete topics and comments
class CommunityAdministrator(models.Model):
    user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.RESTRICT)
    community = models.ForeignKey(Community, on_delete=models.CASCADE, related_name="administrators")

    class Meta:
        constraints = [
            models.UniqueConstraint(fields=['user', 'community'], name='idxu_commty_admin')
        ]        



# Community membership approvals (for restricted and private communities)
#  
class CommunityMembership(models.Model):
    user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.RESTRICT)
    communities = models.ManyToManyField(Community, though='CommunityMembershipApproval')


class CommunityMembershipApproval(models.Model):
    PENDING = 0
    APPROVED = 1
    REJECTED = 2

    APPROVAL_STATES = (
        (PENDING, 'Pending'),
        (APPROVED, 'Approved'),
        (REJECTED, 'Rejected')
    )    
    person = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
    community = models.ForeignKey(Community, on_delete=models.CASCADE)
    approval_state = models.PositiveIntegerField(choices=APPROVAL_STATES, default=PENDING)
    request_tstamp = models.DateTimeField(auto_now=True)

Позволят ли приведенные выше таблицы реализовать функциональность, которую я описал выше - а именно:

  1. Администраторы - позволяет мне добавлять/удалять администраторов сообщества, а также получать доступ к администраторам сообщества через поле administrators
  2. Запросы на членство: Позволяет мне CRUD запросы на одобрение членства
  3. .
Вернуться на верх