1

Fattura というモデルがあり、フィールド "printable" のデフォルト値を、フィールド "numero" の値を含む文字列に設定したいと考えています。

しかし、link_fattura の引数が少ないというエラーがありますが、default=link_fattura(self) を追加すると、self が定義されていないためエラーが発生します。

この問題を解決するにはどうすればよいですか?

class Fattura(models.Model):
        def link_fattura(self, *args, **kwargs):
                return u"http://127.0.0.1:8000/fatture/%s/" % (self.numero)
        data = models.DateField()
        numero = models.CharField("Numero", max_length=3)
        fatturaProForma = models.ForeignKey(FatturaProForma)
        printable = models.CharField("Fattura stampabile", max_length=200, default=link_fattura)
        def __unicode__(self):
                return u"%s %s" % (self.data, self.numero)
        class Meta:
                verbose_name_plural = "Fatture"
                ordering = ['data']
4

2 に答える 2

2

default引数を使用してこれを行うことはできません。最善の策は、saveメソッドをオーバーライドすることです。

def save(self, *args, **kwargs):
    if not self.id and not self.printable:
        self.printable = self.link_fattura()
    return super(Fattura, self).save(*args, **kwargs)
于 2012-08-24T13:53:20.757 に答える
0

申し訳ありませんが、あなたの質問を間違って読みました。あなたのモデルはまだその段階で保存されていないため、javascript なしでは不可能です。

次のような方法で URL を予測できます。

def link_facttura(self):
    if not self.id:
        return some_url/fattura/%d/ % Fattura.objects.latest().id+1
    return u""

ただし、レコードの削除を開始すると、見苦しく、エラーが発生する可能性があります

于 2012-08-24T13:49:18.370 に答える