2009-03-11 3 views
2

У меня есть 2 модели. JobRecord которого имеет много Activity (-ов), fk, конечно, помещается в модель Activity.Модели Django - FK по умолчанию для последней введенной записи (зарегистрированным пользователем)

Для облегчения ввода данных, я хотел бы по умолчанию в FK к JobRecord, в рамках новой деятельности, к «JobRecord Ф.К. последней введенной активности, вошедшим в пользователя (бонусных баллов!)»

Вот модель:

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'] 

Спасибо!

ответ

1

Как первый шаг, вы должны сохранить в некоторой модели последнее действие для каждого пользователя.

class ActivityLog(models.Model) 
    user = models.ForeignKey(User) 
    job_record = models.ForeignKey(JobRecord) 

Тогда в представлении, вы можете получить свою деятельность по некоторому простому запросу:

last_activity_data = ActivityLog.objects.filter(user=request.user) 

и использовать его при инициализации формы для модели:

form = ActivityForm(job_record=last_activity_data.job_record) 

наконец, помните, для обновления журнала при сохранении активности.

Примечание: я пропустил всю проверку ошибок; например, вы должны позаботиться о случае, когда нет last_job_record, но это должно быть довольно тривиально.

Наконец, вы также можете использовать ManyToManyField для Activity, а затем использовать API Django; это было бы совершенно эквивалентно (например, это создало бы таблицу, очень похожую на эту за кулисами), но я думаю, что семантика будет немного отличаться, и по этой причине я предпочел бы явное решение.