Frage

Ich habe eine Klasse-Anwendung und eine Folgebeziehung. Benutzer können einander folgen und können erstellen classrooms.When ein Benutzer ein Klassenzimmer schafft er nur die Menschen einladen, die ihm folgen. Das Klassenmodell ist ein m2m auf Benutzer-Tabelle.

ich habe in Modellen. 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")

und in models.py der Folge Anwendung:

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)

und in views.py des Klassenzimmer App:

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))  

Ich verwende eine Modelform für den Unterricht Form, und die Standardansicht, in Anbetracht meine viele zu viel Beziehung mit Benutzertabelle, in dem Feld Mitgliedern, eine Liste aller Benutzer in der Datenbank ist. Aber ich möchte nur in dieser Liste die Benutzer, die mit der in einer Folgebeziehung sind angemeldete Benutzer - derjenige, der die Ausbildungsbereich schafft. Wie kann ich das tun?

P. S: auch, wenn ich die Form bin zu speichern, es spart, aber ohne „Mitglieder“

Danke!

War es hilfreich?

Lösung

Sie haben die queryset zu ändern, die verwendet wird, um das Formularfeld zu füllen ... Legen Sie die folgenden in Ihrer Formularklasse:

    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])

Um den aktuellen Benutzer in das Formular des __init__ Methode zu erhalten, ändern ihre initsialisation in Ihrer save_classrom Ansicht:

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

Ich bin nicht ganz sicher über die Abfrage, um die Benutzer für Ihren Bereich zu bekommen, aber ich denke, es sollte überprüft werden, dass initiated_by die angemeldeten Benutzer ist?

Um die m2m Beziehungen speichern Sie auch Call form.save_m2m() haben!

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top