A világ megváltoztatásával vagyok elfoglalva

Írok, ezért vagyok.

választások

Feliratkozás erre a blogra

Kövesse e-mailben

Szűrje a ManyToMany mező választásait egy Django ModelFormban

  • Kapcsolatot szerezni
  • Facebook
  • Twitter
  • Pinterest
  • Email
  • Egyéb alkalmazások

A jelenlegi projektemben olyan űrlapot kell készítenem, amelyben egy bizonyos felhasználói csoport csak bizonyos típusú adatokkal tud létrehozni. Például:

  • Az A csoport 1. felhasználója csak tanulócsoportokkal hozhat létre tanár objektumokat (hallgatói számok, mondjuk ['123', '234'])
  • A B csoport 2. felhasználója csak tanulócsoportokkal hozhat létre tanár objektumokat (student_numbers, ['345', '678'])

Így néz ki a modell:
models.py:

a django.db import modellekből

osztály Diák(modellek. Modell):
student_number = modellek. CharField (max_hossz = 6, elsődleges_kulcs = Igaz)
hallgató_neve = modellek. CharField (max_hossz = 20)

def __unicode __ (self):
return self.student_name

osztály Meta:
rendelés = ['hallgató_szám']


osztály Tanár(modellek. Modell):
név = modellek. CharField (max_hossz = 50)
diákok = modellek. ManyToManyField (Student)

def __unicode __ (self):
visszatérés '% s'% (self.name)

osztály Meta:
rendelés = ['név']
verbose_name = "Tanárok"

Az űrlap előállításához és a student_number szerinti szűréshez csak meg kell határoznom a __init__ függvényemet a TeacherForm számára:

from django.forms import ModelForm
a myapps.modelsből importálja a Tanár, a Tanuló

osztály TeacherForm(ModelForm):

def __init __ (én, hallgató_készlet, * érvek, ** kwargs):
szuper (TeacherForm, én) .__ init __ (* arg, ** kwargs)
self.fields ['students']. queryset = Student.objects.filter (student_név__in = student_set)

osztály Meta:
modell = Tanár
mezők = ['név', 'hallgatók']
kizár = []

Tehát a nézetben először meg kell vizsgálnom a felhasználó csoportját annak eldöntésére, hogy a felhasználó mely hallgatókból készíthet, majd továbbítom az űrlappéldánynak: