Django Admin - 无法更改外键字段
我使用的是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
当我尝试发布一个产品时,选择标签是没问题的。发布这个产品也按预期进行,返回到管理控制台中的产品时,标签字段依然有值。但是,如果我尝试更改标签字段的值,我会被带到默认的产品列表页面,并看到消息“产品‘Prod 1’已成功更改”,但返回到Prod 1页面时发现这个字段其实并没有被正确保存。
有没有什么想法可以解决这个问题?
2 个回答
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()
1
super(Product, self).save()
这行代码是在一个 if
语句块里面,所以在编辑的时候不会被调用。另外,为什么不直接在 pub_date
字段上使用 auto_now_add
呢?