J'ai donc des modèles comme ceci:Comment Dynamiquement Accès Les champs de clé étrangère dans Django admin
class Celebrity(models.Model):
#30+ fields here ...
class HoneyBadger(models.Model):
name = models.CharField(max_length=10)
celebrity_owner = models.ForeignKey(Celebrity)
Maintenant, je veux l'interface d'administration pour Honeybadger pour afficher le nom de la créature ainsi que les champs de propriétaire de la célébrité.
Je sais que le conseil standard est de faire quelque chose comme ceci:
class HoneyBadger(models.Model):
name = models.CharField(max_length=10)
celebrity_owner = models.ForeignKey(Celebrity)
def owner_birth_date(self):
return self.celebrity_owner.birth_date
#And so on for every other field in celebrity_owner
Et puis ces méthodes dans la référence à l'administrateur.
Au lieu de cela, je veux un moyen de me sauver tout ce tapant!
Voilà ma première tentative un raccourci paresseux:
class HoneyBadger(models.Model):
name = models.CharField(max_length=10)
celebrity_owner = models.ForeignKey(Celebrity)
def __getattr__(self, name):
"""Dynamically make derived fields for celebrity_owner fields so I don't have to type out"""
field_lookup_prefix = 'celebrity_owner_field_'
if name.startswith(field_lookup_prefix):
field_name = name[len(field_lookup_prefix):]
def wrapper(*args, **kwargs):
return getattr(self.celebrity_owner, field_name)
return wrapper
else:
raise AttributeError('%s not found' % name)
qui fonctionne quand je le lance dans le shell, mais l'administrateur Django ne pas l'aimer. Je reçois cette erreur:
ImproperlyConfigured at /admin/tracker/
HoneyBadgerAdmin.list_display[5], 'celebrity_owner_field_birth_date' is not a callable or an attribute of 'HoneyBadgerAdmin' or found in the model 'HoneyBadger'.
Est-ce que quelqu'un sait comment je peux faire mon travail de code avec l'administrateur ou s'il y a une autre façon de sauver taper une méthode pour chaque champ de célébrité unique? (Peut-être une sorte de patch de singe runtime?)
si elle est juste pour afficher les champs que vous pouvez utiliser la méthode __unicode __() – maazza