0

django/programming 的新手,非常感谢任何帮助。我需要帮助浏览医生预约的历史并选择每次预约时进行的免疫接种,然后创建未来免疫接种的日期(基于免疫信息表,该表具有适当的免疫间隔并且会增加从访问日期开始)

模型.py

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)

我整个周末都在阅读关于 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

这可能会持续数年,每次访问都会进行不同的免疫接种。我想保留执行免疫接种的记录并记录到期日,即使该到期日已过。

视图.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需要帮助。上述工作,但仅在显示 active=1 访问信息。我不知道如何修改/重新做以实现我想要的并且能够访问我的模板文件中的数据。我已经尝试过 __in 方法、itertools、循环等。任何人都可以提供正确的方法/方向吗?一旦我可以让代码工作,我将返回并正确设置错误捕获。谢谢!

4

1 回答 1

0

是的,将间隔设置为 IntegerField 或者可能是 PositiveSmallIntegerField,因为它永远不会得到负值或非常大的数字。小心,最好不要在模型名称中混合复数和单数,当您遍历外键时它们会影响相关名称,这使得调试很痛苦,请参见此处。我更喜欢只使用单数。

代替:

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))
    ...
于 2013-08-13T00:27:36.740 回答