2013-10-29 3 views
11

sto cercando di impostare i valori di default di un campo di scelta su una linea in base alle proprietà del form padre/istanza.Django - valori del campo in linea sulla base all'istanza padre

In pseudo-codice, sarebbe qualcosa di simile:

def get_form(self, ***): 
    if self.parent.instance && self.parent.instance.field_x == "y": 
     self.field_name.choices = ... 

ho cercato su Google, ma non riesco a trovare nulla che fa riferimento al form padre all'interno di un inline.

Forse devo farlo il contrario, ed accedere alle inline all'interno del genitore?

def get_form(self, ***): 
    if self.instance: 
     for inline in self.inlines: 
      if instanceof(inline, MyInline): 
      inline.field_name.choices = ... 

Sono possibili le suddette condizioni?

+4

Hai provato questo? http://stackoverflow.com/questions/1824267/limit-foreign-key-choices-in-select-in-an-inline-form-in-admin – gorus

+1

Lo faccio regolarmente. Utilizza _construct_form anziché get_form. – Esteban

risposta

1

Si potrebbe utilizzare il metodo get_form_kwargs e superare le scelte nel form method init in questo modo

class Form(forms.Form): 
    def __init__(self, *args, **kwargs): 
     choices = kwargs.pop('choices', None) 
     super(Form, self).__init__(*args, **kwargs) 
     form.field.choices = choices 

class FormView(generic.FormView): 

    def get_form_kwargs(self, *args, **kwargs) 
     kwargs = super(FormView, self).get_form_kwargs() 
     kwargs['choices'] = choices 
     return kwargs 

si potrebbe fare il vostro check oggetto principale nel metodo get_form_kwargs e passare una scelta diversa (credo)