Django Admin - 无法更改外键字段

时间:2013-02-21 02:32:35

标签: python django django-models 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 个答案:

答案 0 :(得分:1)

super(Product, self).save()位于if块内,因此在编辑时不会调用它。另外,为什么不在pub_date字段上使用auto_now_add

答案 1 :(得分: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()