簡體   English   中英

Django模型關系

[英]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,並且僅需要booksInShelfbooksUnderCirculationpk列表,則您的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())        

如果您希望擁有booksInShelfbooksUnderCirculation的完整信息(不僅是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_shelfis_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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM