2010-06-25 3 views
4

Je viens de convertir un de mes modèles pour utiliser une clé étrangère générique. Le modèle fonctionne correctement avec ceux-ci, la base de données rapporte des valeurs correctes, et l'API que j'ai fonctionne parfaitement avec la nouvelle clé étrangère avec zéro changement (Garder le même nom de champ).Django GenericTabularInline ne fonctionnera tout simplement pas, mais le modèle est correct

Cependant, l'administrateur échoue totalement. L'Inline ne montre aucune donnée, malgré quelques-uns (voir ci-dessus). Voici mon code de modèle:

class CartItem(models.Model): 
    cart = models.ForeignKey(Cart) 
    quantity = models.PositiveIntegerField() 
    price_item = models.DecimalField(max_digits=19, decimal_places=2) 
    content_type = models.ForeignKey(ContentType) 
    object_id = models.PositiveIntegerField(db_column="shop_item_id") 
    shop_item = generic.GenericForeignKey("content_type", "object_id") 

Assez simple, non? admin.py ressemble à ceci:

class CartItemInline(generic.GenericTabularInline): 
    model = CartItem 

class CartAdmin(admin.ModelAdmin): 
    inlines = [ 
     CartItemInline, 
    ] 

Fait amusant. Si j'ajoute « shop_item » aux champs tuple dans la classe en ligne je reçois cette erreur:

'CartItemInline.fields' refers to field 'shop_item' that is missing from the form.

Mais .. il est là? J'ai tout essayé et après 30 minutes je renonce à ce qui est probablement un problème ridiculement simple à résoudre que mes yeux ne peuvent tout simplement pas voir aujourd'hui. :(

Tout cela a fonctionné avant d'utiliser un GenericForeignKey donc pas sûr de ce que la question pourrait être plus.

Merci pour toute aide.

+0

Avez-vous pu résoudre ce problème? – kiril

Répondre

0

Uhm ... peut-être

admin.site.register(CartItem, CartItemAdmin) 

à la fin de admin.py?

http://docs.djangoproject.com/en/dev/ref/contrib/admin/#using-generic-relations-as-an-inline

Je suppose que c'est parce que vous avez dit "The Inline ne montre aucune donnée" donc je suppose que vous ne l'avez pas enregistré. Je sais que ça a l'air stupide mais c'est ce qui m'est venu à l'esprit.

+1

Il est enregistré, et vous n'avez pas à vous inscrire en ligne (mais je l'ai essayé). Merci pour l'aide en tout cas – Bartek

Questions connexes