Django model.py models.ForeignKey()

时间:2018-02-08 06:21:06

标签: python django

我是Django框架的新手,对模型有点困惑。

当一个"班级"在model.py中,我可以理解为" table"在数据库?例如,在下面的代码中,"测试","联系"和"标记"是Django使用的数据库中的所有表吗?

from django.db import models

class Test(models.Model):
    name = models.CharField(max_length=20)

class Contact(models.Model):  
    name   = models.CharField(max_length=200)        
    age    = models.IntegerField(default=0)        
    email  = models.EmailField()       
    def __unicode__(self):            
       return self.name

class Tag(models.Model):        
    contact = models.ForeignKey(Contact)
    name    = models.CharField(max_length=50)
    def __unicode__(self):
        return self.name

在班级Tag中,它正在使用models.ForeignKey(Contact),根据我的理解,应该在表的一个特定列上建立外键,但为什么ForeignKey建立在直接表,即表Contact

非常感谢任何指导。

2 个答案:

答案 0 :(得分:2)

只有在models.Model类延伸时,您才能将您的类理解为数据库中的表。

这变成了一个表格:

class Order(models.Model):
    pass

这不会成为模特:

class SomeHelper():
    ....

对于ForeignKey,它将自动绑定到其他模型的主键。您可以通过在该ForeignKey中设置to_field来更改它,但默认值为pk

models.ForeignKey(Bar, to_field='non-pk-field')

答案 1 :(得分:1)

外键正在建立具有主键的列。 只有一个主键位于表格中,所以在django中你只需要提供表名。它将自动与具有主键的列建立。

如果您未在列中提及任何主键,则django模型将自动添加一个id列,该列将具有每个条目的唯一非空整数值。

如果要明确地将外键提供给特定列,可以这样做:

models.ForeignKey(TableName, db_column='Column_name')