Django created_at字段在创建对象时未添加



我试图让Django自动向对象添加一个字段,其中日期和时间作为时间戳保存在字段中。

当我在我的视图中创建对象并在管理页面中签入时,会创建其他所有字段,但不会创建此字段。

views.py:

newconf = ConfigUser.objects.create(
ref=''.join(random.SystemRandom().choice(
string.ascii_lowercase + string.ascii_uppercase + string.digits
) for _ in range(20)),
name='',
user=request.user,
# Here I don't add created_at because I want it to be automatic (see models.py)
cpu=cpu[0],
gpu=gpu[0],
ram=ram[0],
ssd_m2=ssd_m2[0],
)

型号.py:

class ConfigUser(models.Model):
ref = models.CharField(max_length=20, unique=True, default='')
name = models.CharField(max_length=128, default='')
user = models.OneToOneField(User, on_delete=models.CASCADE)
created_at = models.DateTimeField(auto_now_add=True)
cpu = models.ForeignKey(CPU, on_delete=models.CASCADE)
gpu = models.ForeignKey(GPU, on_delete=models.CASCADE)
ram = models.ForeignKey(RAM, on_delete=models.CASCADE)
ssd_m2 = models.ForeignKey(SSD_M2, on_delete=models.CASCADE)
def __str__(self):
return self.name

如果模型内部的字段是用auto_now属性集创建的,它还将包括属性editable=False,因此它不会显示在管理面板中。

为了克服这个问题,您需要覆盖save方法:

class ConfigUser(models.Model):
# some code
created_at = models.DateTimeField(editable=False)

def save(self, *args, **kwargs):
if not self.id:
self.created_at = timezone.now()
return super(User, self).save(*args, **kwargs)

首先,请确保检查是否已完成所有模型迁移。其次,作为一种替代方案,您可以尝试创建";newconf";对象,而不是通过objects.create((方法,比如

# Create the record as object of the model class
newconf = ConfigUser(ref=''.join(random.SystemRandom().choice(
string.ascii_lowercase + string.ascii_uppercase + string.digits
) for _ in range(20)),
name='',
user=request.user,
cpu=cpu[0],
gpu=gpu[0],
ram=ram[0],
ssd_m2=ssd_m2[0])
newconf.save()

要使此方法工作,您应该只在模型ConfigUser中添加def__init__方法,并在.中传递所有初始化参数

相关内容

最新更新