0

Ich bin Donig mit einem Poll-System für meine Klasse. Ich verwende model-form und , um das Umfrageformular zu bedienen. Ich benutze choices in im Feld, aber ich finde nur heraus, dass nur den letzten Wert der Kontrollkästchen speichern und ich möchte alle ausgewählten Optionen als Liste speichern. Ich habe versucht, die form_valid() Methode zu ändern, aber ich finde nur heraus, dass ich alle Felder durchlaufen muss, um zu überprüfen, ob es Multipulewahlen gibt. Es ist nicht flexibel. Und ich kann andere Lösungen nicht herausfinden ...Wie kann ich Werte in Django speichern?

Wie kann ich diese Anforderung erfüllen? Ich bin wirklich ein Neuling ..

Vielen Dank im Voraus.

Danke dem Freund unten für die Antwort in einem so kurzen Intervall, nachdem ich meine Frage gestellt habe. Hier ist mein Code.

models.py

CHOICES = (('m','Math'),('f','French'),('s','Science'),('l','literature')) 
class Poll(models.Model): 
    [...] 
    subject = models.CharField(max_length = 5,choices = CHOICES, blank=True) 
    [...]` 

forms.py

class PollForm(forms.ModelForm): 
    model = Poll 
    fields = [..., 'subject', ...] 
    widgets = {'subject':forms.CheckboxSelectMultiple} 

views.py

class PollView(CreateView): 
    form_class = PollForm 
    template_name = 'poll.html' 

Schüler können Themen, die sie wollen wählen.

Antwort

0

Es scheint, als ob Sie Ihr Modell konvertieren müssen. Wenn Sie ein Muster der von Ihnen verwendeten Struktur bereitstellen könnten, wäre es hilfreich. Versuchen Sie dennoch, Ihre Anfrage zu lösen. Zuerst müssen Sie identifizieren, dass die Wahlmöglichkeiten nichts anderes als ein Feld von vielen zu vielen ist. Das Speichern in der db sollte auf diese Weise etwas einfacher sein. Versuchen wir ein Beispiel mit Optionen für einen Benutzer unter:

class Choices(models.Model): 
    description = models.CharField(max_length=100) 

class UserProfile(models.Model): 
    user = models.ForeignKey(User, blank=True, unique=True, verbose_name='profile_user') 
    choices = models.ManyToManyField(Choices) 
    def __unicode__(self): 
    return self.name 

Nun, wenn Sie ein Standardformular machen wollen Sie einfach so etwas wie tun könnte:

class ProfileForm(forms.ModelForm): 
    Meta: 
    model = UserProfile 

Jetzt ist Ihre Hauptansicht kommt. Dies kann bearbeitet und gerendert werden, was auch immer Ihr Anwendungsfall verlangt:

if request.method=='POST': 
    form = ProfileForm(request.POST) 
    if form.is_valid(): 
    profile = form.save(commit=False) 
    profile.user = request.user 
    #Implement this as a pre-save so that you can add additional value 
    profile.save() 
else: 
    form = ProfileForm() 

Hoffen, dass dies hilft.

+0

Vielen Dank! Ich aktualisiere wie erforderlich! – ucag

+0

Glücklich zu hier, dass dies Ihnen geholfen hat. Könnten Sie die Antwort auch so markieren, dass andere, die das gleiche Problem haben, dieselbe Logik verwenden können? Vielen Dank –

Verwandte Themen