Vraag Django: limit_choices_to (Is dit correct)


Is dit correct?

class Customer(models.Model):
    account = models.ForeignKey(Account)


class Order(models.Model):
    account = models.ForeignKey(Account)
    customer = models.ForeignKey(Customer, limit_choices_to={'account': 'self.account'})

Ik probeer ervoor te zorgen dat een bestelformulier alleen klantkeuzen weergeeft die tot hetzelfde account behoren als de bestelling.

Als ik een of andere flagrante slecht ontwerpfout over het hoofd zie, laat het me weten.

Het belangrijkste waar ik me zorgen over maak, is:

limit_choices_to={'account': 'self.account'}

22
2017-12-28 08:56


oorsprong


antwoorden:


Het enige antwoord op 'is correct' is 'werkt het als je het uitvoert?' Het antwoord daarop is natuurlijk nee, dus ik weet niet waarom je het hier vraagt.

Het is niet mogelijk om limit_choices_to dynamisch te beperken op basis van de waarde van een ander veld in het huidige model. De beste manier om dit te doen is door het formulier aan te passen. Definieer een ModelForm-subklasse en overschrijf de __init__ methode:

class MyOrderForm(forms.ModelForm):
    def __init__(self, *args, **kwargs):
        super(MyOrderForm, self).__init__(*args, **kwargs)
        if 'initial' in kwargs:
             self.fields['customer'].queryset = Customer.objects.filter(account=initial.account)

18
2017-12-28 11:38



Je zou moeten instellen choices veld van uw bestelformulier (geërfd van ModelForm) in de constructor.


0
2017-12-28 11:37



limit_choices_to={'account': 'self.account'} is fout, omdat buitenlandse sleutel naar klant niet kan wijzen Account.


-1
2017-12-28 11:02