Django models Django Models-FK默认为上次输入的记录(由登录用户输入)
我有两个模型在讨论中。JobRecord有许多活动,当然,fk放在活动模型中 为了帮助数据输入,我想将新活动中的fk To JobRecord默认为“登录用户上次输入的活动的JobRecord fk(加分!)” 模型如下:Django models Django Models-FK默认为上次输入的记录(由登录用户输入),django-models,Django Models,我有两个模型在讨论中。JobRecord有许多活动,当然,fk放在活动模型中 为了帮助数据输入,我想将新活动中的fk To JobRecord默认为“登录用户上次输入的活动的JobRecord fk(加分!)” 模型如下: class Activity(models.Model): """ Record multiple activities against a JobRecord """ start = models.TimeFie
class Activity(models.Model):
"""
Record multiple activities against a JobRecord
"""
start = models.TimeField(blank=True, null=True)
end = models.TimeField(blank=True, null=True)
job_record = models.ForeignKey(JobRecord) # editable=False)
task = models.ForeignKey(Task, blank=True, null=True) # show only tasks found in project
flora = models.ManyToManyField(Species, blank=True, null=True, help_text='Optional subject flora.')
memo = models.TextField(blank=True, null=True)
all_operators = models.BooleanField(help_text="Check to include all operators from the parent job record")
operators = models.ManyToManyField(User, null=True, blank=True)
duration = models.DecimalField(blank=True, null=True, max_digits=7, decimal_places=2)
class Meta:
#order_with_respect_to = 'job_record' # not working?
ordering = ['-job_record__date', 'job_record', 'start']
form = ActivityForm(job_record=last_activity_data.job_record)
谢谢 作为第一步,您应该将每个用户的最后一个活动存储在某个模型中
class ActivityLog(models.Model)
user = models.ForeignKey(User)
job_record = models.ForeignKey(JobRecord)
然后在视图中,您可以通过一些简单的查询来检索活动:
last_activity_data = ActivityLog.objects.filter(user=request.user)
并在初始化模型的表单时使用它:
class Activity(models.Model):
"""
Record multiple activities against a JobRecord
"""
start = models.TimeField(blank=True, null=True)
end = models.TimeField(blank=True, null=True)
job_record = models.ForeignKey(JobRecord) # editable=False)
task = models.ForeignKey(Task, blank=True, null=True) # show only tasks found in project
flora = models.ManyToManyField(Species, blank=True, null=True, help_text='Optional subject flora.')
memo = models.TextField(blank=True, null=True)
all_operators = models.BooleanField(help_text="Check to include all operators from the parent job record")
operators = models.ManyToManyField(User, null=True, blank=True)
duration = models.DecimalField(blank=True, null=True, max_digits=7, decimal_places=2)
class Meta:
#order_with_respect_to = 'job_record' # not working?
ordering = ['-job_record__date', 'job_record', 'start']
form = ActivityForm(job_record=last_activity_data.job_record)
最后,记住在保存活动时更新日志
注意:我省略了所有的错误检查;例如,您应该注意没有最后一个作业记录的情况,但它应该非常简单
最后,您还可以使用ManyToManyField来创建活动,然后使用Django的API;它将是完全等效的(例如,它将在幕后创建一个非常类似于此的表),但我认为语义会略有不同,因此我更喜欢显式解决方案