2017-02-04 4 views
0

Hier mache ich eine grundlegende MCQ (Multiple Choice Frage) mit Django. Also habe ich zwei Modelle Frage und Option, hier sind die ModelleBearbeiten der Modellfelder auf die erforderliche Spezifikation :)

class Question(models.Model): 
    question_id=models.IntegerField(default=170) 
    question_text=models.CharField(max_length=1000) 

    def __str__(self): 
    return self.question_text 


class Options(models.Model): 
    question=models.ForeignKey(Question,on_delete=models.CASCADE) 
    options=models.CharField(max_length=500) 

    def __str__(self): 
    return self.options 

Wie kann ich die Anzahl der Optionen begrenzen, die auf die Frage gegeben, und eine Benachrichtigung der Benutzer zu geben, dass es eine minimale Anzahl von Optionen sein, ? eine Frage zum Beispiel auf vier die Anzahl der Optionen bis 5 und minimale Anzahl von Fragen beschränken

+0

Gibt es einen besonderen Grund, die clientseitige Validierung oder eine Validierung in 'views' nicht zu verwenden? –

Antwort

1

Aufschalten des Modells clean():

def clean(self): 
    super(Options, self).clean() 
    if self.question.options_set.exclude(pk=self.pk).count() > 4: 
     raise ValidationError("There can only be 5 Options per Question") 

und für Question entsprechend. Wenn alle Instanzen über den Admin oder einige ModelForm erstellt werden, sollte dies ausreichen. Wenn Sie Instanzen programmatisch erstellen, müssen Sie clean() in save() nennen:

def save(self, **kwargs): 
    self.clean() 
    super(Options, self).save(**kwargs) 

Sie könnten noch bulk_create mehr Instanzen, aber für den meisten Fällen sollte dies ausreichen.

Verwandte Themen