2015-06-04 2 views
0

У меня есть две модели: Group и User. У меня есть ManyToManyField в Group, ссылаясь на User. У меня также есть промежуточная модель GroupUser, в которой хранятся дополнительные данные (дата присвоения и тип членства) для отношений «многие ко многим».Подтвердить объекты во многих отношениях во Django

У меня есть страница /groups/group-<group_id>/create-user/, в которой я добавляю пользователей в группу. Моя проблема заключается в том, что если пользователь создается как тип 1, он не может быть назначен другим группам. Как я могу проверить, что пользователь не назначен другим группам, если отношения уже существуют с конкретным пользователем и типом 1?

Я использую CreateView

class GroupUserCreateView(CreateView): 
    model = GroupUser 
    fields = ['user', 'type'] 
    template_name = "group_user_create_form.html" 

    def dispatch(self, request, *args, **kwargs): 
     self.group = get_object_or_404(Group, id=self.kwargs['group_id']) 
     return super(GroupUserCreateView, self).dispatch(request, *args, **kwargs) 

    def form_valid(self, form): 
     form.instance.group = self.group 
     return super(GroupUserCreateView, self).form_valid(form) 

    def get_success_url(self): 
     return reverse('group_user_list', kwargs={'group_id': self.group.id}) 

ответ

0

Не знаю много о CreateView, но я думаю, перезаписать get_form и настроить QuerySet на на user поле.

def get_form(self, form_class): 
    create_form = super(GroupUserCreateView, self).get_form(form_class) 
    create_form.fields['user'].queryset = User.objects.exclude(groupuser__type=1) 
    return create_form 
+0

Это почти сработало, но меня интересуют только те пользователи, в которых 'Membership.type = 1'. По-прежнему можно добавить тех пользователей, у которых нет членства с типом = 1. Является ли это возможным? Я использую Django 1.8 – Jamgreen

+0

Я скорректировал свой ответ. Мы знаем, что все пользователи, у которых нет набора groupuser__type = 1. В конце, продолжайте регулировать 'QuerySet' до его права. – Blackeagle52