Django ModelForm met dynamisch model init kwargs

Ik heb een model met een __ init __ methode:

class Foo(models.Model):
    name = models.CharField(max_length=50)

    def __init__(self, *args, **kwargs):
        self.bar = kwargs.pop('bar', False)
        super(Foo, self).__init__(*args, **kwargs)
        if self.bar:
            # do something
            pass

Nu moet ik een specifiek ModelForm maken:

class FooForm(ModelForm):

    class Meta:
        model = Foo(bar='something')
        fields = ('name',)

Dat werkt blijkbaar niet:

TypeError: 'Foo' object is not callable

Is er een manier om dit te overwinnen?

Bijwerken

Meer informatie over wat ik wil bereiken: ik heb een Image-model met een ImageField. Het heeft verschillende opslagmethoden, afhankelijk van het formulier dat het gebruikt.

Het model:

class Image(models.Model):
    image = models.ImageField(upload_to=imageUploadTo)
    user = models.ForeignKey('auth.User')

    def __init__(self, *args, **kwargs):
        self.overwrite = kwargs.pop('overwrite', False)
        super(Image, self).__init__(*args, **kwargs)
        if self.overwrite:
            self.image.storage = OverwriteStorage()

Nu wil ik formulieren kunnen maken die de oude afbeelding en formulieren overschrijven die het standaardgedrag gebruiken. Wat is de beste manier om dit te bereiken?

0
ik heb mijn vraag bijgewerkt met meer achtergrondinformatie
toegevoegd de auteur Alp, de bron

1 antwoord

Nee, dat is helemaal niet hoe het werkt, en dit heeft niets te maken met je aangepaste init. Je belt de dingen niet binnen in Meta. In uw geval geeft u de parameter door wanneer u het formulier in uw weergave initialiseert.

3
toegevoegd
form = ArticleForm (request.POST, request.FILES, instance = Image (overwrite = True))
toegevoegd de auteur Daniel Roseman, de bron
hoe worden de parameters voor het formulier doorgegeven aan de modelinitialisatie?
toegevoegd de auteur Alp, de bron
momenteel heb ik: form = ArticleForm (request.POST, request.FILES) - hoe kan ik dat combineren met uw aanpak van het vooraf initialiseren van het exemplaar?
toegevoegd de auteur Alp, de bron
form = ArticleForm (instance = article) Maar kijk eens naar docs.djangoproject. nl/nl/dev/topics/forms/modelforms u verliest uw tijd niet.
toegevoegd de auteur Zashas, de bron