0

管理インターフェイスから保存するときに、多対多フィールドで選択したフィールドを取得する際に問題が発生しています。

これは私のモデルの単純化されたバージョンです。

class Template(models.Model):
    name = models.CharField('name', max_length = 100)
    sites = models.ManyToManyField(Sites)

    def save(self, *args, **kwargs):
        // Do something with the value of sites
        for site in self.sites.all():
            print site

        super(Template, self).save(*args, **kwargs)

これにより、管理インターフェイスで保存するときに、選択したすべてのサイトが出力されます。ただし、これは実際には、保存する前に選択されたすべてのサイトを印刷します!

Image 名前が 'foo' でサイトが ['a', 'b'] のテンプレートがあります。管理インターフェイスで編集し、サイト「b」の選択を解除すると、[「a」] が印刷されます。ただし、出力は ['a', 'b']、たとえば古い値です。

これを修正する方法を知っている人はいますか?

助けていただければ幸いです。

4

1 に答える 1

0

Calling save will commit the changes, so you probably want to iterate over the sites afterwards, like this:

def save(self, *args, **kwargs):
    super(Template, self).save(*args, **kwargs)
    for site in self.sites.all():
        print site

If you specifically want to perform an action pre or post save, then have a look at how signals work in Django.

于 2012-04-22T18:27:48.160 に答える