2013-08-12 2 views
0

django/프로그래밍을 처음 접하면 모든 도움을 얻을 수 있습니다. 의사 약속의 역사를 통해 도움을 필요로하고, 각 약속에서 수행 된 예방 접종을 선택하고, 나중에 예방 접종이 예정된 날짜를 작성하는 데 도움이 필요합니다 (예방 접종의 적절한 간격이 있고,ManyToManyField가 포함 된 목록의 장고 날짜 증가

class Immunizations(models.Model): 
    immunization = models.CharField(max_length=100, null=True) 
    interval = models.CharField(max_length=5, null=True)**This should probably be an integer field, will change later 

class Visit(models.Model): 
    patient = models.ForeignKey(Patients) 
    date_of_visit = models.DateField(null=True) 
    weight = models.CharField(max_length=5, null=True) 
    immunization = models.ManyToManyField(Immunizations) 
    timestamp = models.DateTimeField(auto_now_add=True, default=datetime.datetime.now()) 
    active = models.BooleanField(default=True) 

models.py

) 방문 날짜에서 나는 SO 주말에 문서와 질문을 읽고, 그러나 아직도이 통과하는 어떤 방법에 대해 매우 갈등 생각하고있다.

내가 원하는 것은 :

Visit.date_of_visit1 
    Visit.immunization1, Visit.date_of_visit1 + Immunization.interval1 
    Visit.immunization2, Visit.date_of_visit1 + Immunization.interval2 
Visit.date_of_visit2 
    Visit.immunization1, Visit.date_of_visit2 + Immunization.interval1 
ETC 

이가 방문 할 때마다 수행 다른 예방 접종을 갖는 년 동안 갈 수있다. 나는 예방 접종이 수행 된 기록을 유지하고 기한이 지났더라도 기한을 기록하기를 원합니다.

views.py

def visit_profile(request, slug): 
    patient = Patients.objects.get(slug=slug) 
    try: 
      visit = Visit.objects.filter(patient_id=patient.id) 
    except: 
     return HttpResponseRedirect('/') 

    #Immunization Due Dates 
    visitdate = Visit.objects.get(patient_id=patient.id, active=1).date_of_visit 
    imm = Immunizations.objects.all() 
    visitimm = [] 
    for immunization in imm: 
     due = Immunizations.objects.get(id= immunization.pk) 
     duedate = visitdate + timedelta(days=int(due.interval)) 
     visitimm.append((due, duedate)) 
    return render_to_response('patient.html',locals(), context_instance=RequestContext(request)) 

내 views.py에 도움이 필요합니다. 위의 작업은 활성 = 1 방문 정보 만 표시합니다. 필자가 원하는 것을 달성하고 템플릿 파일의 데이터에 액세스 할 수 있도록 수정/다시 수행하는 방법을 이해할 수 없습니다. 나는 __in 메서드, itertools, 루핑 등을 실험했습니다. 누구나이 작업을 수행하기위한 적절한 방법/방향을 제공 할 수 있습니까? 다시 돌아가서 제대로 작동하도록 코드를 얻을 수 있다면 제대로 설치 오류 잡기. 감사!

답변

0

네가 IntegerField 또는 오히려 PositiveSmallIntegerField를 간격을 두지 마십시오. 음수 값이나 매우 큰 숫자를 얻지 못할 것이기 때문입니다. 조심스럽게, 모델명에 복수형과 단수를 섞어서 사용하지 마십시오. 외래 키를 통과 할 때 관련 이름에 영향을 미치므로 디버그하는 데 어려움이 있습니다 (see here). 나는 단수를 사용하는 것을 선호합니다.

대신은 :

visit = Visit.objects.filter(patient_id=patient.id) 

당신은 간단하게 입력 할 수 있습니다

visit = Visit.objects.filter(patient=patient) 

def visit_profile(request, slug): 
    patient = Patients.objects.get(slug=slug) 
    visitimm = [] 
    # Looping over all active visit records of the patient in date order 
    for v in patient.visit_set 
        .filter(active=True).order_by('date_of_visit'): 
     # Looping over each visit's immunizations 
     for i in v.immunizations_set.all(): 
      duedate = v.date_of_visit + timedelta(days=int(i.interval)) 
      visitimm.append((i, duedate)) 
    ... 
+0

대 같은 것을보십시오! 도와 주셔서 감사합니다. 내 템플릿에서는 ifequal을 사용하여이 값을 템플릿의 적절한 date_of_visit 행으로 구분합니다. 이것은 내 요구 사항을 처리하는 것 같아요 문서에 따르면 적절하지만, 물론 이것을 처리하는 더 복잡한 방법이 있다고 확신합니다. – Rob24