Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django models Django Models-FK默认为上次输入的记录(由登录用户输入)_Django Models - Fatal编程技术网

Django models Django Models-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

我有两个模型在讨论中。JobRecord有许多活动,当然,fk放在活动模型中

为了帮助数据输入,我想将新活动中的fk To JobRecord默认为“登录用户上次输入的活动的JobRecord fk(加分!)”

模型如下:

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;它将是完全等效的(例如,它将在幕后创建一个非常类似于此的表),但我认为语义会略有不同,因此我更喜欢显式解决方案