Django模型关系

2024-06-16 14:11:14 发布

您现在位置:Python中文网/ 问答频道 /正文

下面是我的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)

这里的booksuser是指实际拥有图书的用户,即书架和未流通的图书

类书是所有书籍的中心存储库,我需要定义一个一对多的关系图书管理员。什么这样做容易吗?在

User Book是BookUser特有的,它应该唯一地指向类Book,所以它与Book类是多对一的关系。在

我对如何处理UserBook和Book的id感到困惑? 另外,如何在类BookUser中存储UserBooks的id列表??在


Tags: ofidtrueidsmodelmodelslengthmax
2条回答

在查看了Book模型下面提供的模型和解释之后,users字段应该与BookUser模型有ForeignKey关系。在

所以图书模型应该是

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,并且您只需要pk列表booksInShelf和{},那么您的BookUser模型应该如下所示

^{pr2}$

如果你想知道booksInShelf和{}的全部信息(不仅是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模型中创建两个多个字段,您可以在UserBook模型中使用两个标志,分别名为is_in_shelf和{}。这些字段将是BooleanField,您可以在Django文档中查看更多关于模型字段的信息:https://docs.djangoproject.com/en/1.10/topics/db/models/#fields

这应该是您想要的:

class UserBook(models.Model):
    bookId = models.ForeignKey('Book')

在这里,UserBook引用了Book项,几个用户可以拥有同一本书,但它仍然是表book中唯一的引用。在

希望有帮助

相关问题 更多 >