我想从团队模型中添加/删除成员。成员被指定为 ManyToManyField。我使用 django-rules 来指定权限,因此团队所有者应该能够添加/删除成员。
# models.py
from django.db import models
from rules.contrib.models import RulesModel
from django.conf import settings
class Team(RulesModel):
name = models.CharField(max_length=80)
owner = models.ForeignKey(
settings.AUTH_USER_MODEL,
on_delete=models.CASCADE,
help_text="Owner can view, change or delete this team.",
related_name="team_owner",
)
members = models.ManyToManyField(
settings.AUTH_USER_MODEL, blank=True, related_name="team_members"
)
权限指定如下:
import rules
@rules.predicate
def is_team_owner(user, obj):
return obj.owner == user
rules.add_perm("teamapp.change_team", is_team_owner)
我指定了一些通用视图(CreateView、DetailView、UpdateView 和 DeleteView)来管理团队。现在我想要两个单独的视图来添加和删除相同的成员。
# views.py
from django.views.generic import (
CreateView,
DetailView,
UpdateView,
ListView,
DeleteView,
)
from rules.contrib.views import PermissionRequiredMixin
from django.contrib.auth import get_user_model
from .models import Team
class TeamMemberAddView(PermissionRequiredMixin, UpdateView):
model = Team
permission_required = "teamapp.change_team"
raise_exception = True
fields = ["members"]
def form_valid(self, form):
user = get_user_model()
new_member = user.objects.get(pk=1)
self.object.members.add(new_member)
return super(TeamMemberAddView, self).form_valid(form)
我可以使用哪个通用视图来添加/删除成员?这里推荐哪种方法?我想要 1 个专用视图来选择要添加的现有用户,以及列表视图上的一些链接来删除成员。我的方法失败了,因为它不添加成员,它只更新到最后选择的用户。所以 ManyToMany 表只包含一条记录。