首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ManyToManyField列表中的Django-日期增量

ManyToManyField列表中的Django-日期增量
EN

Stack Overflow用户
提问于 2013-08-12 13:35:00
回答 1查看 103关注 0票数 0

对于django/编程来说,任何帮助都是非常感谢的。我需要帮助了解医生预约的历史,并选择每次预约时进行的免疫接种,然后创建未来免疫接种的日期(基于免疫信息表,该表具有适当的免疫间隔,并将从访问日期起增加)。

models.py

代码语言:javascript
复制
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)

整个周末我都在阅读文档和问题,但是对于如何处理这个问题,我仍然感到非常矛盾。

我想要的是:

代码语言:javascript
复制
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

代码语言:javascript
复制
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方法、迭代工具、循环等等。有人能给出正确的方法/方向吗?我将返回并正确设置错误捕获一旦我可以使代码工作。谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-08-13 00:27:36

是的,让interval成为一个IntegerField,或者更确切地说是一个PositiveSmallIntegerField,因为它永远不会得到一个负值,也不会得到一个非常大的数字。小心,最好不要将模型名称中的复数和单数混为一谈,当您遍历外键时,它们会影响相关的名称,这会使调试( 请看这里 )变得很痛苦。我更喜欢只使用奇异点。

而不是:

代码语言:javascript
复制
visit = Visit.objects.filter(patient_id=patient.id)

您可以简单地键入:

代码语言:javascript
复制
visit = Visit.objects.filter(patient=patient)

试试像这样的东西

代码语言:javascript
复制
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
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18188403

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档