У меня есть настраиваемое поле пользователя и поле разрешений в приложении django. В документации сказано следующее:

https://docs.djangoproject.com/en/2.0/ref/models/fields/#django.db.models.ManyToManyField

Я также сейчас изучаю эту статью:

http://charlesleifer.com/blog/describing-relationships-djangos-manytomany-through/

Что мы должны использовать многие методы.

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

class STUser(AbstractBaseUser):
    email = models.EmailField(unique=True)
    name = models.CharField(max_length=255)
    companyname = models.CharField(max_length=200, blank=True, null=True)
    userphoto = models.CharField(max_length=200, blank=True, null=True)
    signupvaildatestring = models.CharField(max_length=200, blank=True, null=True)
    is_active = models.BooleanField(default=False)
    phone = models.CharField(max_length=10, null=True, blank=True)
    jobtitle = models.CharField(max_length=100, null=True, blank=True)
    # password field function is provided by AbstractBaseUser

И таблица разрешений

  class Permissions(models.Model):
    venue = models.ForeignKey(Venue, on_delete=models.DO_NOTHING, blank=True, null=True)
    user = models.ForeignKey(STUser, on_delete=models.DO_NOTHING)
    isclient = models.BooleanField(default=False)
    isvenueviewer = models.BooleanField(default=False)
    isvenueeventplanner = models.BooleanField(default=False)
    isvenueadministrator = models.BooleanField(default=False)
    issuitsviewer = models.BooleanField(default=False)
    issuitsadministrator = models.BooleanField(default=False)
    issuitssuperuser = models.BooleanField(default=False)

Теперь я должен использовать на этом сквозные поля? Пример, который используется в документации ниже, отличается ли он от моей реализации, где мне не нужно использовать поле сквозного прохождения?

from django.db import models

class Person(models.Model):
    name = models.CharField(max_length=50)

class Group(models.Model):
    name = models.CharField(max_length=128)
    members = models.ManyToManyField(
        Person,
        through='Membership',
        through_fields=('group', 'person'),
    )

class Membership(models.Model):
    group = models.ForeignKey(Group, on_delete=models.CASCADE)
    person = models.ForeignKey(Person, on_delete=models.CASCADE)
    inviter = models.ForeignKey(
        Person,
        on_delete=models.CASCADE,
        related_name="membership_invites",
    )
    invite_reason = models.CharField(max_length=64)

Это сильно сбивает с толку.

-1
amazing carrot soup 27 Фев 2018 в 04:22

1 ответ

Лучший ответ

Итак, вот правильная реализация.

class Permissions(models.Model):
    venue = models.ForeignKey(Venue, on_delete=models.CASCADE, blank=True, null=True)
    isclient = models.BooleanField(default=False)
    isvenueviewer = models.BooleanField(default=False)
    isvenueeventplanner = models.BooleanField(default=False)
    isvenueadministrator = models.BooleanField(default=False)
    issuitsviewer = models.BooleanField(default=False)
    issuitsadministrator = models.BooleanField(default=False)
    issuitssuperuser = models.BooleanField(default=False)

class STUser(AbstractBaseUser):
    email = models.EmailField(unique=True)
    name = models.CharField(max_length=255)
    companyname = models.CharField(max_length=200, blank=True, null=True)
    userphoto = models.CharField(max_length=200, blank=True, null=True)
    signupvaildatestring = models.CharField(max_length=200, blank=True, null=True)
    is_active = models.BooleanField(default=False)
    phone = models.CharField(max_length=10, null=True, blank=True)
    jobtitle = models.CharField(max_length=100, null=True, blank=True)
    permissions = models.ManyToManyField(Permissions, through='Authorization')
    # password field function is provided by AbstractBaseUser



class Authorization(models.Model):
    user= models.ForeignKey(STUser, on_delete=models.CASCADE)
    permission = models.ForeignKey(Permissions, on_delete=models.CASCADE)
0
amazing carrot soup 27 Фев 2018 в 07:30