2009-07-02 6 views
2

J'ai un modèle de produit qui a un prix FK, car un produit peut contenir de nombreux prix. Mais je veux aussi être en mesure de choisir lequel de ces nombreux prix devrait être le prix réel, donc j'ai à la fois le prix (dans le modèle du produit) et le produit (dans le modèle de prix) pour y parvenir. Tenez compte de ces modèles suivants:Filtrage dynamique sur FK dans Django Admin

class Product(models.Model): 
name = models.CharField() 
price  = models.ForeignKey('Price', blank=True, null=True, related_name='Product') 

class Price(models.Model): 
amount = models.IntegerField() 
product = models.ForeignKey('Product', related_name='product') 

Cela fonctionne bien même si j'ai problème le filtrage des prix dans le menu déroulant. Il me donne tous les prix au lieu de seulement les prix qui se rapportent à ce produit. Essayé

limit_choices_to 

mais cela ne semble pas fonctionner avec des valeurs dynamiques.

J'ai aussi rencontré ce patch: http://code.djangoproject.com/ticket/2445

Je ne sais pas quelle est la meilleure solution serait ici. Apprécierait quelques pointeurs, merci!

+0

Que voulez-vous dire lorsqu'un produit peut contenir de nombreux prix, mais en choisir un? J'essaie simplement de comprendre la portée de ce que vous essayez de faire pour que je puisse proposer quelque chose de pertinent. – AlbertoPL

+0

Un produit peut avoir plusieurs prix (FK 1, inline). Mais parmi ces prix qui se rapportent à un produit, l'un est choisi pour être le prix "principal" (FK 2, menu déroulant) qui sera affiché plus tard sur la page de vue détaillée. J'espère que c'était une meilleure explication :) – orwellian

Répondre

0

Vous pouvez faire:

prix = price.object_set_all (produit = « votre produit »)

J'ai quitté l'étiquette de votre produit »parce que je ne me souviens pas si l'auto va travailler dans ce situation. Cependant, je pense cela peut être l'approche correcte.

Vous ne devriez pas avoir le ForeignKey apparaissant dans les deux modèles, vous en avez vraiment besoin dans Price. Ensuite, votre modèle de produit peut avoir un champ appelé current_price qui est basé sur une sélection d'utilisateur.

+0

Merci pour votre réponse AlbertoPL Je reçois: L'objet 'ForeignKey' n'a pas d'attribut 'object_set' ou: L'objet 'ForeignKey' n'a pas d'attribut 'object_set_all' sur: price = models.ForeignKey (' Prix ​​') prices = data.object_set_all (product =' votre produit ') Aussi, je ne suis pas sûr de savoir à quoi devrait ressembler le champ current_price dans le modèle de produit. – orwellian

+0

C'est parce que je vous ai dit le complètement faux ce hé, il devrait être Product.objects.all() <- et vous pouvez filtrer par tout champ que vous souhaitez dans la parenthèse. – AlbertoPL

+0

Plutôt, il devrait être Price.objects.all(), désolé. – AlbertoPL