0

我想从团队模型中添加/删除成员。成员被指定为 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 表只包含一条记录。

4

0 回答 0