Django OneToOneField,ManyToManyField,外键

时间:2014-07-23 19:49:13

标签: python django foreign-keys one-to-one django-orm

我已经阅读了许多有关OneToOneField,ManyToManyField和Foreign Key的帖子,但它们并不是很清楚。我是Django和python编程的新手,目前正在尝试开发模型。有人可以用简单的语言向我解释,最好是举例说明它们各自的含义吗?

1 个答案:

答案 0 :(得分:8)

想象一个存储您的图书集的数据库:

from django.db import models

class Place(models.Model):
    address = models.CharField(max_length=50)
    country = models.CharField(max_length=50)

class Publisher(models.Model):
    name = models.CharField(max_length=30)
    place = models.OneToOneField(Place, primary_key=True)

class Author(models.Model):
    first_name = models.CharField(max_length=30)
    last_name = models.CharField(max_length=40)

class Book(models.Model):
    title = models.CharField(max_length=100)
    publisher = models.ForeignKey(Publisher)
    authors = models.ManyToManyField(Author)

一对多/外键

每个Book只有一个Publisher,但Publisher可能已发布多本图书。因此,他们处于一对多(书籍与出版商)的关系中。

<强>一对一的

每个Publisher位于一个Place中,每个Place只能容纳一个Publisher。因此,他们是一对一的关系。您可以将Place信息(addresscountry)与Publisher模型放在一个表中,但有时候最好有单独的模型。例如,如果您不知道每个Place的{​​{1}},则不需要占用大量空行空间。

<强>许多对多

每个Publisher也有一个或多个Book个。但是,Author可能已写入多个Author,因此它们处于多对多关系中。

如果您仍需要一些指导,建议您查看the model chapter of the Django Book