Vorrei che la mia applicazione django servisse un elenco di campi di qualsiasi modello (questo aiuterà la GUI a costruirsi).Django: elenca tutti i rapporti inversi di un modello
Immaginate le classi (ignorare il fatto che tutti i campi della Steps
potrebbe essere in Item
, ho le mie ragioni :-))
class Item(models.Model):
name = models.CharField(max_length=100)
description = models.TextField()
class Steps(models.Model):
item = models.OneToOneField('Item', related_name='steps')
design = models.BooleanField(default=False)
prototype = models.BooleanField(default=False)
production = models.BooleanField(default=False)
Ora, quando voglio elencare i campi di un modello:
def get_fields(model):
return model._meta.fields + model._meta.many_to_many
Ma vorrei anche ottenere l'elenco delle chiavi esterne "correlate" one-to-one ai miei modelli. Nel mio caso Item.steps
non sarebbe in quella lista.
Ho trovato che model._meta.get_all_field_names
include tutti i campi correlati.
Ma quando chiamo Item._meta.get_field_by_name('steps')
restituisce una tupla in possesso di un RelatedObject
, che non mi dica immediatamente se si tratta di un singolo relazione o uno-a-molti (voglio elencare invertita solo uno-a-uno relazioni).
Inoltre, posso usare questo pezzo di codice:
from django.db.models.fields.related import SingleRelatedObjectDescriptor
reversed_f_keys = [attr for attr in Item.__dict__.values() \
if isinstance(attr, SingleRelatedObjectDescriptor)]
Ma io non sono molto soddisfatto di questo.
Qualsiasi aiuto, idea, suggerimenti sono i benvenuti!
Acclamazioni
Quindi sì, ho una soluzione potenziale per il mio bisogno, ma sarei lieto di averne uno migliore :) –