[英]Django Models relations
下面是我的Django模型代碼
from django.db import models
class BookUser(models.Model):
email= models.CharField(max_length=254,primary_key=True) #mail address key
name = models.CharField(max_length=254) #max 64 char (lower case?)
contact= models.CharField(max_length=12)
imei = models.CharField(max_length=16) #imei number
address= models.TextField() #list of address ids
booksInShelf:[] #list of user book's unique ids
booksUnderCirculation:[] #list of user book's unique ids
class Meta:
ordering = ('email',)
class Book(models.Model):
isbn = models.CharField(max_length=13)
title=models.CharField(max_length=500)
description =models.TextField()
author = models.CharField(max_length=200)
userRating = models.CharField(max_length=1)
users = #list of user ids hold this book in shelf
class UserBook(models.Model):
#id: generated by django
bookId: #id of parent book
rent= models.BooleanField(default=False) #boolean is ready to rent
sell= models.BooleanField(default=False) #boolean is ready to sell
price =models.FloatField() #selling price
rentBase=models.FloatField() #base price of rent
rentPeriod=models.IntegerField() #days after which extra rent would apply
dateModified =models.DateTimeField(auto_now=True) #track date it came into shelf
dateAdded = models.DateTimeField(auto_now_add=True)
這里的BookUser是擁有兩類書籍的實際用戶,即booksinShelf和bookUnderCirculation
class Book是所有書籍的中央存儲庫,我需要定義一個與BookUser的一對多關系。這樣做的簡單方法是什么?
User Book是特定於BookUser的,它應該唯一地指向Class Book,因此它與Book Class是多對一的關系。
我對如何處理UserBook和Book的ID感到困惑? 還有如何在類BookUser中存儲UserBooks的ID列表?
在查看Book
模型下方提供的模型和說明之后,用戶字段應與BookUser
模型具有ForeignKey
關系。
所以Book模型應該看起來像
class Book(models.Model):
isbn = models.CharField(max_length=13)
title=models.CharField(max_length=500)
description =models.TextField()
author = models.CharField(max_length=200)
userRating = models.CharField(max_length=1)
users = models.ForeignKey(BookUser, null=True, blank=True)
如果您使用的是Postgresql,並且僅需要booksInShelf
和booksUnderCirculation
的pk
列表,則您的BookUser模型應類似於
class BookUser(models.Model):
email= models.CharField(max_length=254,primary_key=True)
name = models.CharField(max_length=254)
contact= models.CharField(max_length=12)
imei = models.CharField(max_length=16)
address= models.TextField()
booksInShelf = models.ArrayField(models.IntegerField())
booksUnderCirculation = models.ArrayField(models.IntegerField())
如果您希望擁有booksInShelf
和booksUnderCirculation
的完整信息(不僅是pk
還包括與該書有關的其他信息),則需要將其定義為ManyToMany
關系。
class BookUser(models.Model):
email= models.CharField(max_length=254,primary_key=True)
name = models.CharField(max_length=254)
contact= models.CharField(max_length=12)
imei = models.CharField(max_length=16)
address= models.TextField()
booksInShelf = models.ManyToMany(UserBook)
booksUnderCirculation = models.ManyToMany(UserBook)
同樣,除了在BookUser模型中創建兩個ManyToMany字段之外,您還可以在UserBook模型中創建兩個標記,分別為is_in_shelf
和is_under_circulation
。 這些字段將是BooleanField,您可以在以下Django文檔中查看有關模型字段的更多信息: https ://docs.djangoproject.com/en/1.10/topics/db/models/#fields
這應該做你想要的:
class UserBook(models.Model):
bookId = models.ForeignKey('Book')
這里的UserBook
引用了Book
項,幾個用戶可以擁有同一本書,但在您的Book表中仍然是唯一的引用。
希望能幫助到你
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.