【问题标题】:Django OneToOneField, ManyToManyField, Foreign KeyDjango OneToOneField、ManyToManyField、外键
【发布时间】:2014-09-15 04:16:02
【问题描述】:

我已经阅读了很多关于 OneToOneField、ManyToManyField 和外键是什么的帖子,但它们并不是很清楚。我对 Django 和 python 编程非常陌生,目前正在尝试开发模型。谁能用简单的语言向我解释一下,最好是举例说明它们各自是什么?

【问题讨论】:

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


    【解决方案1】:

    想象一个数据库,它存储您的藏书:

    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 模型放在一个表中,但有时最好使用单独的模型。例如,如果您不知道每个 Publisher 对应的 Place,则不需要用空行占用大量空间。

    多对多

    每个Book 也有一个或多个Authors。但是,一个Author 可能写了多个Books,所以它们是多对多的关系。

    如果你还需要一些指导,我建议你看看the model chapter of the Django Book

    【讨论】:

    • 优秀的答案。我还建议 OP 阅读有关数据库关系的信息,因为它们直接应用这些 Django 字段。试试这个 - code.tutsplus.com/articles/…
    • 这为我清除了一切!非常感谢!抱歉,我没有足够的声誉来回答您的问题 =/
    • @Rjzheng 乐于助人。 (:
    猜你喜欢
    • 2013-02-16
    • 2012-02-22
    • 1970-01-01
    • 2012-02-10
    • 2016-01-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多