如何在Django中创建多对一字段?

如何在Django中创建多对一字段?,django,django-models,foreign-keys,Django,Django Models,Foreign Keys,我想在book-author-Publishing的基础上创建一个简单的Django项目 这本书有一位作者,但作者有多本书 第二,我想知道书和出版物之间的关系,比如出版物有多本书,但书只有一本出版物(如果书出版了),或者书没有出版物(如果书没有出版),我如何为它建立模型 在这种情况下,在何处使用外键?可以为多对一关系创建一个。由于您的书籍有一位作者,因此我们为书籍模型指定了一个外键: from django.db import models class Author(models.Model)

我想在book-author-Publishing的基础上创建一个简单的Django项目

这本书有一位作者,但作者有多本书

第二,我想知道书和出版物之间的关系,比如出版物有多本书,但书只有一本出版物(如果书出版了),或者书没有出版物(如果书没有出版),我如何为它建立模型

在这种情况下,在何处使用外键?

可以为多对一关系创建一个。由于您的
书籍
有一位作者,因此我们为
书籍
模型指定了一个
外键

from django.db import models

class Author(models.Model):
    name = models.CharField(max_length=128)
    # some other fields
    # …

class Book(models.Model):
    title = models.CharField(max_length=128)
    author = models.ForeignKey(
        Author,
        on_delete=models.CASCADE,
        related_name='books'
    )
然后,您可以访问
书籍的
作者
,例如
b1
,如下所示:

b1.author  # will return a
对于出版物,您可以再次使用
ForeignKey
,但是
ForeignKey
可以是
NULL
,我们通过指定参数来实现这一点,并进行设置,以便
ModelForm
s和
ModelAdmin
s不会将其视为必填字段:

class Book(models.Model):
    title = models.CharField(max_length=128)
    author = models.ForeignKey(
        Author,
        on_delete=models.CASCADE,
        related_name='books'
    )
    publication = models.ForeignKey(
        Publication,
        on_delete=models.CASCADE,
        related_name='books',
        null=True,
        blank=True
    )
教材(models.Model):
title=models.CharField(最大长度=128)
author=models.ForeignKey(
作者
在_delete=models.CASCADE上,
相关_name='books'
)
publication=models.ForeignKey(
出版
在_delete=models.CASCADE上,
相关书籍,
空=真,
空白=真

)
现在我可以理解书的作者关系了。图书出版关系的解决方案是什么,其中关系基于条件???我不知何故忽略了这一点,在这种情况下,您可以使
NULL
able
ForeignKey
a.books.all()  # a queryset containing b1 and b2
class Book(models.Model):
    title = models.CharField(max_length=128)
    author = models.ForeignKey(
        Author,
        on_delete=models.CASCADE,
        related_name='books'
    )
    publication = models.ForeignKey(
        Publication,
        on_delete=models.CASCADE,
        related_name='books',
        null=True,
        blank=True
    )