2009-12-30 6 views
0

Vous avez des modèles:forme Django modèle associé

class Order(Model): 
date = DateField(editable = False, auto_now_add=True) 
status = CharField(max_length = 1, choices = STATUS, default = 'N') 
profile = ForeignKey(Profile, related_name = 'orders', blank = True, null = True) 
shipping = ForeignKey(Shipping, related_name = 'orders', blank = True, null = True) 
address = ForeignKey(Address, related_name = 'address_orders', blank = True, null = True) 
company = ForeignKey(Company, related_name = 'company_orders', blank = True, null = True) 

class Address(Model): 
address_profile = ForeignKey(Profile, related_name = 'addresses') 
city = CharField(max_length = 256, blank = True, null = True) 
street = CharField(max_length = 256, blank = True, null = True) 
zipcode = CharField(max_length = 10, blank = True, null = True) 
phone = CharField(max_length = 23, blank = True, null = True) 

class Company(Address): 
company_profile = ForeignKey(Profile, related_name = 'companies') 
name = CharField(max_length = 256, blank = True, null = True) 
company_id = CharField(max_length = 256, blank = True, null = True) 

Comment créer OrderForm pour le profil spécifié? Avec celui-ci

class OrderCheckoutForm(forms.ModelForm): 
class Meta: 
    model = Order 

Je reçois un formulaire avec toutes les adresses et entreprises en option. Je voudrais les limiter à leur profil. Y a-t-il une solution simple?

Merci d'avance, Etam.

Répondre

3

Vous pouvez envoyer un jeu de requête à votre ModelChoiceField (ce que ModelForms utilise pour ForeignKeys, vous pouvez le trouver dans django/forms/models.py). Quelque chose comme,

class OrderCheckoutForm(forms.ModelForm): 
    profile = models.ModelChoiceField(queryset = Profile.objects.filter(...)) 

    class Meta: 
     model = Order 

Bien sûr, votre critère de filtrage dépend de ce que vous essayez d'accomplir, ce qui est clair à 100% de votre message original.

Questions connexes