我有这种情况:
型号:
class Test2(models.Model) {
date = models.DateField(editable=False)
}
class Test(models.Model) {
test2 = models.ForeignKey(Test2)
}
动作:
for test_obj in Test.objects.all():
test2_obj = test_obj.test2
test2_obj.date = date.today()
test2_obj.save()
test_obj.save()
在该操作之后,test2_obj
的日期不会更改。为什么? test2_obj = test_obj.test2
是副本吗?
答案 0 :(得分:0)
我创建了testapp并测试了你的问题
models.py
from django.db import models
class Test2(models.Model):
date = models.DateField(editable=False)
class Test(models.Model):
test2 = models.ForeignKey(Test2)
tests.py
from django.test import TestCase
from models import Test, Test2
from datetime import datetime, date
class SimpleTest(TestCase):
def test_field_update(self):
old_date = date(2012,11,11)
current_date = datetime.today().date()
t2 = Test2(date = old_date)
t2.save()
t1 = Test(test2 = t2)
t1.save()
for test_obj in Test.objects.all():
test2_obj = test_obj.test2
test2_obj.date = current_date
test2_obj.save()
test_obj.save()
t2 = Test2.objects.all()[0]
self.assertEqual(t2.date, current_date)
运行测试
..> manage.py test testapp
为别名'default'创建测试数据库.... -------------------------------------------------- --------------------在0.016秒内进行1次测试
确定销毁别名'default'的测试数据库......
所以你按预期工作,而不是你发布的。