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_addpub_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 回答