Django Models - FK padrão para o último registro entrou (pelo usuário conectado)

votos
2

Eu tenho 2 modelos em questão. JobRecord dos quais tem muitos Actividade (s), o FK, evidentemente, colocado no modelo de Actividade.

Para auxiliar a entrada de dados, eu gostaria de usar como padrão o fk para JobRecord, dentro de uma nova atividade, para o 'fk JobRecord da última actividade inserida, pelo usuário conectado (pontos de bónus!)'

Aqui está o modelo:

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

Obrigado!

Publicado 12/03/2009 em 00:03
fonte usuário
Em outras línguas...                            


1 respostas

votos
1

Como um primeiro passo, você deve armazenar em algum modelo a última atividade para cada usuário.

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

Em seguida, no ponto de vista, você pode recuperar a atividade por alguns consulta simples:

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

e usá-lo na inicialização do formulário para o modelo:

form = ActivityForm(job_record=last_activity_data.job_record)

Finalmente, lembre-se de atualizar o log ao gravar a atividade.

Nota: Eu omiti toda a verificação de erros; por exemplo, você deve tomar cuidado com o caso em que não há last_job_record's, mas deve ser bastante trivial.

Finalmente, você também pode usar um ManyToManyField para a atividade, e em seguida, usando a API do Django; seria perfeitamente equivalente (por exemplo, seria criar uma tabela muito semelhante a este nos bastidores), mas acho que a semântica seria um pouco diferente e por esta razão que eu iria preferir a solução explícita.

Respondeu 12/03/2009 em 01:12
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more