Джанго м2м формы появляются поля - PullRequest
1 голос
/ 11 июня 2010

У меня есть заявление в классе, и у меня есть следующие отношения.Пользователи могут следовать друг за другом и создавать классные комнаты. Когда пользователь создает классную комнату, он может приглашать только тех, кто следует за ним.Модель Classroom представляет собой таблицу m2m для пользователя.

у меня есть в моделях.py:

class Classroom(models.Model):
     creator = models.ForeignKey(User)
     classname = models.CharField(max_length=140, unique = True)
     date = models.DateTimeField(auto_now=True)
     open_class = models.BooleanField(default=True)
     members = models.ManyToManyField(User,related_name="list of invited members")

и в models.py следующего приложения:

class Relations(models.Model):    
    initiated_by = models.ForeignKey(User, editable=False)
    date_initiated = models.DateTimeField(auto_now=True, editable = False)
    follow = models.ForeignKey(User, editable = False, related_name = "follow") 
    date_follow = models.DateTimeField(auto_now=True, editable = False)

и в views.py учебного приложения:

def save_classroom(request, username):

   if request.method == 'POST':
        u = User.objects.get(username=username)
        form = ClassroomForm(request.POST, request.FILES) 
        if form.is_valid():
           new_obj = form.save(commit=False)
           new_obj.creator = request.user 
           r = Relations.objects.filter(initiated_by = request.user)
         #  new_obj.members = 
           new_obj.save()
           return HttpResponseRedirect('.')    
   else:
           form = ClassroomForm()     
   return render_to_response('classroom/classroom_form.html', {
           'form': form,

           }, 
          context_instance=RequestContext(request))  

iЯ использую ModelForm для формы классной комнаты, и представление по умолчанию, принимая во внимание мое отношение «многие ко многим» с таблицей «Пользователь» в поле «Участники», представляет собой список всех пользователей в моей базе данных.Но я хочу, чтобы в этом списке были только те пользователи, которые поддерживают отношения с вошедшим в систему пользователем - тем, кто создает классную комнату.Как я могу это сделать?

ps: также, когда я сохраняю форму, она сохраняет, но без "членов"

Спасибо!

1 Ответ

1 голос
/ 12 июня 2010

Вы должны изменить набор запросов, который используется для заполнения поля формы ... Поместите в ваш класс формы следующее:

    def __init__(self, *args, **kwargs):
        user = kwargs.pop('user')
        super(ClassroomForm, self).__init__(*args, **kwargs)
        relations = Relations.objects.filter(initiated_by=user)
        self.fields["members"].queryset = \
            User.objects.filter(pk__in=[r.follow.pk for r in relations])

Чтобы включить текущего пользователя в метод __init__ формы, измените его инициализацию в представлении save_classrom:

        form = ClassroomForm(request.POST, request.FILES, user=request.user) 
        # and after the else:
        form = ClassroomForm(user=request.user)     

Я не совсем уверен насчет запроса, чтобы получить пользователей для вашего поля, но я думаю, что нужно проверить, что init_by является вошедшим пользователем?

Чтобы сохранить отношения m2m, вы также должны позвонить form.save_m2m()!

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