Django自定义多对多查询

时间:2018-08-17 09:43:20

标签: django python-3.x django-models

我通过将 ManyToManyField 添加到另一个名为Algorithm的表中,扩展了Django的默认User类。新的User类是:

class User(AbstractUser):

    name = CharField(_("Name of User"), blank=True, max_length=255)
    algorithms = ManyToManyField(Algorithm, blank=True, default=None, related_name="users")

    def get_absolute_url(self):
        return reverse("users:detail", kwargs={"username": self.username})

我想指定用户is_superuser还是is_staff,然后User.algorithms.all()将获得所有算法。否则,仅获取数据透视表User_user_models中的记录。如何做到这一点?我尝试添加一个属性方法,该方法检查超级用户/工作人员是否返回所有内容,否则返回超级,但不起作用。

P.S:在创建/编辑用户期间,如果将用户设置为超级用户或职员,则无需选择算法。

1 个答案:

答案 0 :(得分:0)

我只会覆盖save()方法:

class User(AbstractUser):

    name = CharField(_("Name of User"), blank=True, max_length=255)
    algorithms = ManyToManyField(Algorithm, blank=True, default=None, related_name="users")

    def get_absolute_url(self):
        return reverse("users:detail", kwargs={"username": self.username})

    def save(self, **kwargs):

         if self.is_superuser or self.is_staff:
             self.algorithms = Algorithm.objects.all()

         else:
             # Get your users from your pivot table

         super().save()