Django模型 - 外键对象日期重写

时间:2012-12-11 12:13:58

标签: python django foreign-keys models django-queryset

我有这种情况:

型号:

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是副本吗?

1 个答案:

答案 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'的测试数据库......

所以你按预期工作,而不是你发布的。