J'ai ceci:Set attribut d'un modèle à une certaine valeur avant d'enregistrer
class OrderForm(ModelForm):
class Meta:
model = Order
exclude = ('number',)
def __init__(self, *args, **kwargs):
super(OrderForm, self).__init__(*args, **kwargs)
if self.initial.get('account', None):
self.fields['customer'].queryset = Customer.objects.filter(account=self.initial.get('account'))
def save(self, force_insert=False, force_update=False, commit=True):
m = super(OrderForm, self).save(commit=False)
# my custom code was here
if commit:
m.save()
return m
Cela fonctionne, sauf que je dois régler le « numéro » attribut de « commande » (ce qui est nécessaire) à un certain nombre. Je ne sais pas comment le faire. J'ai essayé d'ajouter:
self.fields['number'] = 50
dans la méthode « save() », mais je reçois toujours un IntegrityError quand cliquez sur Enregistrer (évidemment ce n'est pas la syntaxe correcte mais il fait allusion à ce que je suis en train de le faire). Un autre problème que j'ai rencontré pour aggraver les choses est que je ne peux même pas accéder aux champs ['nombre'] maintenant parce que c'est dans l'attribut exclure Meta (je ne veux pas que les gens puissent l'éditer, ou que ce soit un) .
Devrais-je le faire dans la méthode "save()" de mon modèle à la place, ou peut-être dans le "init()"?
50 est juste un exemple. Je vais le générer dynamiquement (pseudo incrémentation). J'ai aussi besoin d'accéder à la partie "initial.account". Comment ferais-je cela dans le modèle? Fondamentalement je veux lire les attributs de nombre de tous les ordres qui ont compte = SpamAccount. – orokusaki
Vous pouvez exécuter des requêtes à partir de votre méthode save(), comme vous le pouvez dans une vue. –
Je veux l'enregistrer chaque fois à 50, et je ne veux pas qu'il soit envoyé à partir du formulaire. comment devrais-je faire ça? – Clayton