Дополнительный параметр для моделей Django - PullRequest
1 голос
/ 27 февраля 2010

С моделями Django я хочу добиться этого:

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

    #wrapping the save function, including extra tasks
    def save(self, *args, **kwargs):
        super(Foo, self).save(*args, **kwargs)

            if extra_param:
            ...do task 1
        else:
            ...do task 2

И при создании Foo я хочу передать такие, как

Foo(name="Bill Gates",extra_param=True).save() # now triggers the task 1
Foo(name="Bill Gates").save() # now triggers the task 2

Как это можно сделать? Я также открыт для любых других предложений:)

Спасибо

1 Ответ

9 голосов
/ 27 февраля 2010

Вы можете определить непостоянные поля в вашей модели.

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

def save(self, *args, **kwargs):
    ... 
    print self.extra_param

В качестве альтернативы вы можете сделать:

Foo(name="Bill Gates").save(extra_param=True)

def save(self, *args, **kwargs):
    ... 
    print kwargs["extra_param"]
...