我正在尝试使用django来组织和管理我的临床研究数据。我想我只需要管理界面就可以了,因为这是一个幕后数据库,不需要公开。我会编程,但以前从来没有用过python,所以我被简单的事情卡住了。
我的病人需要多次就诊。每次访问都会涉及多次扫描。在管理界面中,我可以看到所有的访问和扫描,就像每个患者页面上的内联一样。但是,在添加新的扫描时,我如何才能使它与哪个就诊关联的选择仅限于相关患者的就诊,而不是其他患者的就诊?
型号(简化):
class Patient(models.Model):
patient_id = models.CharField(max_length=16, primary_key=True)
first_name = models.CharField(max_length=64)
last_name = models.CharField(max_length=64)
class Visit(models.Model):
patient = models.ForeignKey(Patient)
visit_date = models.DateTimeField()
class Scan(models.Model):
patient = models.ForeignKey(Patient)
visit = models.ForeignKey(Visit)
scan_type = models.CharField(max_length=32)非常感谢你的帮助...
发布于 2011-10-28 23:20:07
两个示例仅略有不同:
首先:
class ScanInlineAdmin(admin.TabularAdmin):
model = Scan
formset = ScanInlineFormset
def formfield_for_foreignkey(self, db_field, request, **kwargs):
if db_field.name == "visit":
patient = self.get_object(kwargs['request'], Patient)
kwargs["queryset"] = Visit.objects.filter(patient=patient)
return super(ScanInlineAdmin, self).formfield_for_foreignkey(db_field, request, **kwargs)
def get_object(self, request, model):
object_id = request.META['PATH_INFO'].strip('/').split('/')[-1]
try:
object_id = int(object_id)
except ValueError:
return None
return model.objects.get(pk=object_id)第二:
class ScanInline(admin.TabularInline):
model = Scan
formset = ScanInlineFormset
def formfield_for_dbfield(self, field, **kwargs):
if field.name == 'visit':
# Note - get_object hasn't been defined yet
patient = self.get_object(kwargs['request'], Patient)
vists = Visit.objects.filter(patient=patient)
return forms.ModelChoiceField(queryset=visits)
return super(ScanInline, self).formfield_for_dbfield(field, **kwargs)
def get_object(self, request, model):
object_id = request.META['PATH_INFO'].strip('/').split('/')[-1]
try:
object_id = int(object_id)
except ValueError:
return None
return model.objects.get(pk=object_id)你可能会发现这个article很有帮助。我假设您在患者页面中编辑/查看您想要输入新扫描的位置。对吗?
发布于 2011-10-28 20:25:02
我认为formfield_for_foreignkey方法会对你有很大帮助。你可以在admin类中实现它。参见docs。
https://stackoverflow.com/questions/7919001
复制相似问题