2016-10-12 1 views
0

ModelChoiceField fügt das Attribut selected in HTML hinzu, wenn das Objekt aus der Auswahlliste FK zum übergeordneten Objekt hat.Wie 'ausgewähltes' Attribut aus Element in ModelChoiceField zu entfernen?

Wie \ where kann ich dieses Attribut 'selected' entfernen, um nur eine Liste von Auswahlmöglichkeiten zu erhalten? Ich möchte erwähnen, dass ich nur das "ausgewählte" Attribut entfernen muss, d. H. Der Wert selbst sollte nicht aus der Auswahlliste entfernt werden. Ich muss es irgendwie von der Python-Seite einhaken, nicht von HTML. Ich habe versucht, benötigte Attribute an verschiedenen Stellen innerhalb form zu finden, aber kein Glück.

Kennt jemand den Teil des Django-Codes, in dem geprüft wird, ob ein Objekt aus der Auswahlliste FK zum übergeordneten Modell hat?

Antwort

0

Ich weiß nicht, ob es funktioniert oder nicht, aber eine Idee wäre für Sie klar.

So fand ich Quelle von Select Widget, das Ihre selected Eigenschaft in HTML setzt. Es ist here, suchen Sie einfach nach selected_html.

Sie können versuchen, Select Widget Unterklasse:

from django.forms.widgets import Select 

class CustomSelect(Select): 
    def render_option(self, selected_choices, option_value, option_label): 
     if option_value is None: 
      option_value = '' 
     option_value = force_text(option_value) 
     if option_value in selected_choices: 
      selected_html = '' # make it empty string like in else statement or refactor all that method 
      if not self.allow_multiple_selected: 
       # Only allow for a single selection. 
       selected_choices.remove(option_value) 
     else: 
      selected_html = '' 
     return format_html('<option value="{}"{}>{}</option>', option_value, selected_html, force_text(option_label)) 

Und dann in Formen

class YourForm(forms.Form): 
    your_field = forms.ModelChoiceField(widget=CustomSelect()) 
    ... 

Es ist einfach Lösung, die ich mit kam, und ich weiß, dass dies nicht so elegant ist, aber es scheint, dass es keine einfache Möglichkeit gibt, diese selected Sache zu deaktivieren.

+0

Es funktioniert) Kurz bevor Sie gepostet, fand ich den benötigten Code in Django Quellen und überprüft :) – TitanFighter

+0

@TitanFighter froh, dass geholfen. :) –

Verwandte Themen