2017-05-03 1 views
0

Kann jemand sagen, wie solche Form wie in dem Bild unten in Django erstellen?Wie werden Markierungen in Kontrollkästchen gespeichert?

enter image description here

Ich habe Modell Product mit Feld is_visable. Im Formular möchte ich alle Produkte mit dem Feld is_visable anzeigen. Benutzer kann Kontrollkästchen auswählen und den Wert is_visable Feld ändern. Mit anderen Worten: Produkte sichtbar oder unsichtbar machen. Ich bin Sache über MultipleChoiceField in meiner Form, aber nicht sicher ist es in meinem Fall richtig.

models.py:

class Product(models.Model): 
    symbol = models.CharField(_('Symbol'), max_length=250) 
    name = models.CharField(_('Name'), max_length=250) 
    is_visible = models.BooleanField(default=False) 

forms.py:

class ProductForm(forms.ModelForm): 
    product = forms.ModelChoiceField(widget=forms.CheckboxSelectMultiple, queryset=Product.objects.all()) 

views.py:

if request.method == 'POST': 
    form = ProductForm(data=request.POST) 
    if form.is_valid(): 
     ids = form.cleaned_data.get('product') # Example: ['pk', 'pk'] 
     for id in ids: 
      product = Product.objects.get(pk=id) 
      product.is_visible = True 
      product.save() 

Antwort

0

Ich denke, wha Möchten Sie verwenden, ist ein ModelChoiceField in Ihrem Formular mit einem Widget von CheckboxSelectMultiple.

A queryset für die ModelChoiceField ist ein erforderliches Argument, so dass Sie die queryset wie diese bauen kann:

visible_products = Product.objects.filter(is_visible=True) 
product_field = forms.ModelChoiceField(queryset=visible_products, 
           widget=CheckboxSelectMultiple() 

Sehen Sie diesen Beitrag für mehr Details

:

Django ChoiceField populated from database values

+0

Hallo! Kannst du meinen Beitrag noch einmal überprüfen? Ich füge Formular und Sichtcode hinzu. Ich zeige alle Produkte in Form an und ändere dann den Wert von is_visable von Produkten, auf die der Benutzer in Ansichten geklickt hat. Aber ich klaue nicht, wie man Markierung in Checkbox in jenen Produkten speichert, die 'is_visable = True' haben? Hast du irgendwelche Ideen dazu? –

Verwandte Themen