【发布时间】:2010-01-21 11:42:53
【问题描述】:
我在更新对象时遇到问题。这是模型:
class HourRecord(models.Model):
day_of_work = models.PositiveIntegerField(max_length=1)
date_of_work = models.DateField(verbose_name='creation date')
who_worked = models.ForeignKey(User)
project = models.ForeignKey(Project, related_name='hour_record_set', null=True)
created_by = models.ForeignKey(User, editable=False, related_name='hour_record_creator')
created = models.DateTimeField(auto_now_add=True, editable=False, verbose_name='creation date')
modified_by = models.ForeignKey(User, editable=False, related_name='hour_record_modifier')
modified = models.DateTimeField(auto_now=True, editable=False)
def save(self, request):
if not self.id:
self.who_worked = request.user
self.created_by = request.user
self.modified_by = request.user
super(HourRecord, self).save()
created_by 字段只有在它是一个新对象时才应该设置。因此“如果不是 self.id:”。到目前为止,这工作得很好。
到目前为止,我更新了这样的对象:
if hrform.is_valid():
hour_record = hrform.save(commit=False)
hour_record.save(request)
但是当我像这样更新模型时出现错误:
project = Project.objects.get(id=project_pk)
hr_object = HourRecord(id=hour_record_pk, day_of_work=weekday, date_of_work=date, who_worked=request.user, project=project)
hr_object.save(request)
错误信息是:
Column 'created_by_id' cannot be null
这对我来说很奇怪,因为 created_by 列已经设置好了。我在数据库中检查了它。在我再次检查此错误消息后,对象已更新并且 created_by_id 设置为空。其实这很奇怪。我收到一条错误消息 + 行已更新。
第二种方法是从 json 数据处理视图中调用的。但我不认为这与它有任何关系。我想我可以在重置 created_by_id 时绕过这个问题,但这不是我想要做的,因为它破坏了这个 created_by 字段的逻辑。
【问题讨论】:
标签: django django-models