Django OneToOneField,ManyToManyField,外键

Rjz*_*eng 5 python django foreign-keys one-to-one django-orm

我读过很多关于OneToOneField,ManyToManyField和Foreign Key的帖子,但是他们不是很清楚.我是Django和python编程的新手,目前正在尝试开发模型.有人可以用简单的语言向我解释,最好是举个例子,它们各自是什么?

Ban*_*ana 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)
Run Code Online (Sandbox Code Playgroud)

一对多/外键

每个Book都有一个Publisher,但Publisher可能已经出版了多本书.因此,他们处于一对多(书籍到出版商)的关系中.

一比一

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

许多一对多

每个人Book也有一个或多个Author.然而,一个人Author可能写了多个Books,所以他们处于多对多的关系中.

如果您仍需要一些指导,我建议您查看Django Book的模型章节.