Django - Как сохранить выбранную роль? - PullRequest
0 голосов
/ 18 января 2020

Я использую django -groups-manager.

Я хочу выбрать роль участника в форме добавления участника. Я перечисляю роли, но я не знаю, как сохранить выбранную роль. Как мне это сделать? Я жду вашей помощи.

Снимок экрана

forms.py

class CalisanForm(UserCreationForm):
username = forms.CharField(max_length=100, label='Kullanıcı Adı')
email = forms.EmailField(max_length=200, help_text='Required')
password1 = forms.CharField(max_length=100, label='Parola', widget=forms.PasswordInput)
password2 = forms.CharField(max_length=100, label='Parola Doğrulama', widget=forms.PasswordInput)
group = forms.ModelChoiceField(queryset=Group.objects.all(), widget=forms.widgets.RadioSelect(), empty_label=None)
roles = forms.ModelChoiceField(queryset=GroupMemberRole.objects.all(), widget=forms.widgets.RadioSelect(), empty_label=None)

def __init__(self, *args, **kwargs):
    qs = kwargs.pop("group_qs")
    super().__init__(*args, **kwargs)
    self.fields["group"].queryset = qs

class Meta:
    model = User
    fields = [
        'username',
        'email',
        'password1',
        'password2',
        'group',
        'roles',
    ]

def clean_password2(self):
    password1 = self.cleaned_data.get('password1')
    password2 = self.cleaned_data.get('password2')
    if password1 and password2 and password1 != password2:
        raise forms.ValidationError("Parolalar eşleşmiyor!")
    return password2

def clean_email(self):
    email = self.cleaned_data.get('email')
    lenghtw = len(User.objects.filter(email=email))
    if lenghtw > 0 :
        raise forms.ValidationError('Bu email adresine sahip bir kullanıcı zaten var.')
    return email

просмотров. py

def calisan(request):
queryset = request.user.groups
form = CalisanForm(request.POST or None, group_qs=queryset)
if form.is_valid():
    user = form.save()
    group = form.cleaned_data['group']
    user.groups.add(AGroup.objects.get(name=group))
    username = form.cleaned_data['username']
    member = Member.objects.create(first_name=username)
    group = Group.objects.get(name=form.cleaned_data['group'])
    group.add_member(member)
    user.save()
    password = form.cleaned_data.get('password1')
    new_user = authenticate(username=user.username, password=password)
    return redirect('home')
return render(request, 'accounts/calisan/calisan.html', {'form': form, 'title': 'Üye Ol'})

1 Ответ

1 голос
/ 18 января 2020
group.add_member(member, [form.cleaned_data.get('roles')])

Параметры, которые add_member принимают:

  • member: элемент (обязательно)

  • roles: список ролей. Каждая роль может быть идентификатором роли, меткой роли или кодовым именем, экземпляром роли (необязательно, по умолчанию: [])

  • expiration_date: отметка времени, указывающая, когда истекает срок членства. Обратите внимание, что это не приводит к автоматическому удалению участника из группы, а является показателем для внешнего приложения, чтобы проверить, действительно ли членство по-прежнему действует (необязательно, по умолчанию: None)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...