0

Djangoバージョン1.4.5を使用しています

これが私のモデルの関連部分です

class Product (models.Model):
    name=models.CharField(max_length=200)
    description=models.TextField()
    label=models.ForeignKey('Label')
    pub_date = models.DateTimeField(editable=False)

    def save(self):
        #item will not have id if this is the first save
        if not self.id:
            self.pub_date = datetime.date.today()
            super(Product, self).save()

    def __unicode__(self):
    return self.name

class Label(models.Model):
    """
    A clothing label, e.g. Kate Spade
    """
    name=models.CharField(max_length=100)

    def __unicode__(self):
        return self.name

製品を公開しようとすると、ラベルを選択しても問題なく機能します。アイテムの公開は期待どおりに機能し、管理コンソールで製品に戻ったときにラベルフィールドに値が入力されたままになります。ただし、ラベルフィールドの値を変更しようとすると、「製品「製品1」が正常に変更されました」というメッセージが表示されたデフォルトの製品リストページが表示されますが、製品1ページに戻るとフィールドが表示されます。実際には正しく保存されませんでした。

ここに何かアイデアはありますか?

4

2 に答える 2

1

super(Product, self).save()ブロック内にあるifため、編集時に呼び出されません。また、フィールドで使用auto_now_addしないのはなぜですか?pub_date

于 2013-02-21T04:32:24.263 に答える
1

あなたの場合、日付と時刻を明示的に設定する必要はありません。auto_now_add詳細については、このリンクを参照してください。

https://docs.djangoproject.com/en/dev/ref/models/fields/#django.db.models.DateField.auto_now_add

class Product (models.Model):
    name=models.CharField(max_length=200)
    description=models.TextField()
    label=models.ForeignKey('Label')
    pub_date = models.DateTimeField(editable=False, auto_now_add = True)

    def __unicode__(self):
    return self.name

手動で設定する必要がある場合は、次のスニペットを使用してください。変化もスーパークラスと呼んでいます。

def save(self):
    #item will not have id if this is the first save
    if not self.id:
        self.pub_date = datetime.date.today()
    super(Product, self).save()
于 2013-02-21T04:33:51.137 に答える