Django Admin - 无法更改外键字段

0 投票
2 回答
1011 浏览
提问于 2025-04-17 16:34

我使用的是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 呢?

撰写回答