Django外键显示

2024-04-27 04:06:18 发布

您现在位置:Python中文网/ 问答频道 /正文

更新了对问题的回答:当显示药物时,如何从Atc获取一个查找值以显示在事务表(druges)上?在

Saverio的方法,将关系嵌入到模型中:

在模型.py在

class Atc(models.Model):
    id = models.CharField(max_length=60, primary_key=True, db_column='ID') 
    txt = models.CharField(max_length=690, db_column='TXT')
    class Meta:
        db_table = u'ATC'
    def __unicode__(self):
    return u"%s - %s" % (self.id, self.txt)

class Drug(models.Model):
    id = models.CharField(max_length=64, primary_key=True, db_column='ID')
    atc = models.ForeignKey(Atc, db_column='ATCCD')
    pricetopharm = models.FloatField(db_column='PRICETOPHARM')
    brandnm = models.CharField(max_length=135, db_column='BRANDNM')
    drugnm = models.CharField(max_length=240, db_column='DRUGNM')
    class Meta:
        db_table = u'DRUGS'
    def __unicode__(self):
    return u"%s - %s" %(self.drugnm, self.formandstrength)

在管理员py在

^{pr2}$

关键点是模型.py在

atc = models.ForeignKey(Atc, db_column='ATCCD')

药品(交易,非参考表)和

('ATC',          {'fields': ['atc','brandnm'] }),

致管理员py表示多对一关系的字段集。在

现在,内容管理员py不太相关(这应该是MTV的理念。另外,用单数形式重命名对象(药物,而不是药物)是有帮助的,如果没有其他方法可以去除重复的s(即药物不是药物)。 结果显示药物显示一个id+txt的下拉框,例如P04H11-细胞毒性

谢谢你们的帮助 皮特

(太小了,汉堡没法回答我自己的问题,所以修改了原来的问题!)在


Tags: py模型selftxtiddbmodelscolumn
2条回答

为什么不只是

class Atc(models.Model): # in models.py
    drug = models.ForeignKey('Drug')
    description = models.CharField(max_length=10000)
    def __unicode__(self): return u"%s - %s" % (self.id, self.description)

class AtcInline(admin.StackedInline): # in admin.py
    # set option for not being able to add more than one.
    model = Atc
    fields = ['description']

这将在表单的inlines部分显示药物实例的相关atc。在

(另外,值得注意的是,django模型通常以单数命名,如Drug而不是{}。这与Drug.objects.filter()drug = Drug()等在语义上是正确的)

编辑:关于数据库模式和数据模型的进一步考虑

您似乎有一个以前的数据库模式要使用。如果不能更改列名,则至少可以为属性指定更有意义的名称,这样代码的可读性要高得多:

^{pr2}$

如果您也拥有DB模式,那么一旦数据模型完成,就使用South migrations(db.rename(table_name, old_column_name, new_column_name))将模式与现在可读的数据模型同步。在

你是怎么得到那个描述的?如果你有任何代码张贴,也许我们可以帮助更多!在

您必须使用notesid来获取notesinline对象并显示它!在

fetched_note = NotesInline.objects.filter(id=notesid)

其中notesid是DrugsAdmin的对象变量:)

相关问题 更多 >