如何解决如何在 Django 中创建多对一字段?
我想基于 book-author-publish 做一个简单的 Django 项目
这里的书有一个作者,但作者有多本书。
第二,我想要书和出版物之间的关系,比如出版物有多本书但书只有一个出版物(如果出版了书)或书没有出版(如果书没有出版)我该如何为它制作模型?
这里面哪里要用到外键?
解决方法
你是一个多对一关系的ForeignKey
[Django-doc]。由于您的 Book
有一个作者,因此我们为 ForeignKey
模型指定了一个 Book
:
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'
)
related_name=…
反向指定关系的名称(因此获取给定 Book
的所有 Author
),默认为 modelname_set
,所以这里那将是 book_set
,但我们可以在这里将其更改为 books
。
然后您可以创建一个 Author
对象,例如:
a = Author.objects.create(name='J R R Tolkien')
b1 = Book.objects.create(author=a,title='The Hobbit')
b2 = Book.objects.create(author=a,title='Lord of the Rings')
然后您可以访问 author
的 Book
,例如 b1
为:
b1.author # will return a
我们可以通过以下方式获得a
写的书:
a.books.all() # a queryset containing b1 and b2
对于发布,您可以再次使用 ForeignKey
,但是 ForeignKey
可以是 NULL
,我们通过指定 null=True
[Django-doc] 参数来实现,并设置 { {3}},这样 ModelForm
和 ModelAdmin
不会将此视为必填字段:
class Book(models.Model):
title = models.CharField(max_length=128)
author = models.ForeignKey(
Author,related_name='books'
)
publication = models.ForeignKey(
Publication,related_name='books',null=True,blank=True
)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。