2016-04-13 16 views
0

läßt i Modell Klasse sagen:Wie erstellt man mehrere Instanzen des gleichen Feldtyps in Django?

class Classroom(models.Model): 
    name = models.CharField(max_length=255,) 
    number_of_students = models.IntegerField() 

und jede Klasse kann unterschiedliche Anzahl von Studenten. Ich möchte Klasse Studenten haben, die auf Klassenmodell verwandt ist

class Students(models.Model): 
    student_name = models.CharField(max_length=255) 
    student_gender = models.CharField(max_length=255) 
    classroom = models.ForeignKey(Classroom) 

ich will, wenn ich die Anzahl der Studenten geben neue Form für jeden Schüler zu bekommen. Wie könnte ich das tun?

Antwort

0

number_of_students eine Eigenschaft der Klasse machen, dass nur eine einfache Abfrage tut es abzurufen, Theres keine Notwendigkeit, eine beliebige Anzahl

@property 
def number_of_students(self): 
    return self.students_set.count() 
0

Ich bin zu raten, zu speichern, was Sie suchen dynamische Form Generation. Ein paar Zeiger:

1) Der beste Weg (IMO) dies zu tun wäre, einige Javascript-Bibliothek zu verwenden, um Formulare im laufenden Betrieb anzuhängen. Überprüfen Sie die Benutzereingaben und fügen Sie Formulare im laufenden Betrieb hinzu. Sie können IDs wie form_1, form_2 verwenden, um die Studentenformulare zu unterscheiden.

2) Dann würden Sie in Ihrem Backend die POST Parameter durchlaufen und die Schülerfelder manuell erstellen (nachdem Sie Ihre Klasse erstellt haben). Wie werden Sie wissen, wie viele Studenten der Benutzer ausgefüllt hat (d. H. Wie viele Studentenformulare wurden eingereicht)? Übergeben Sie die Benutzereingabe als ein verstecktes Feld in Ihrem Formular, und führen Sie anschließend eine Schleife darüber aus.

Damit können Sie eine einzige Ansicht zum Erstellen der Klasse und ihrer Schüler erstellen.

Die andere Option:

1) Führen Sie die Zahl der Studenten auf Ihre StudentCreationForm (oder ClassCreationForm) als zusätzliches Argument bei init. Dies erfordert, dass Sie die Anzahl der Schüler als Eingabe von Ihrem Benutzer auf einer vorherigen Seite (über Ajax/Post) nehmen. Der folgende Link bietet eine hervorragende Anleitung, wie dies zu erreichen ist:

Verwandte Themen