我通过将 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:在创建/编辑用户期间,如果将用户设置为超级用户或职员,则无需选择算法。
答案 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()