Django 2中的关系型号.py

2024-09-27 07:34:17 发布

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

我想在models.py中定义BookMemberBorrow之间的关系

ER

但我不知道如何定义Borrow关系。 在Borrow表中,必须确定谁借了哪些书,哪些书在哪一天还了。我应该为这个日期字段使用另一个表吗?你知道吗

models.py

from django.contrib.auth.models import AbstractUser
from django.db import models
from django.utils.translation import gettext as _

class CategoryType(models.Model):
    category_name = models.CharField(max_length=200)
    def __str__(self):
        return self.category_name

class Book(models.Model):
    name = models.CharField(verbose_name="عنوان", max_length=128)
    number_of_copy = models.IntegerField(default=0)
    writer = models.CharField(max_length=64)
    B_category = models.ForeignKey(CategoryType, on_delete=models.CASCADE)
    class Meta:
        ordering = ["B_category"]
    def __str__(self):
        return self.name


class Borrow(models.Model):
    borrowed_from_date = models.DateField(_("borrow Date"), default=0)
    borrowed_to_date = models.DateField(_("return Date"), default=3)
    actual_return_date = models.DateField()
    borrowed_by = models.ForeignKey(member, on_delete=models.CASCADE)
    books = models.ManyToManyField(Book)
    def __str__(self):
        return self.id


class Member(AbstractUser):
   pass

我认为在Member类中,我应该有一个包含borrow_id的字段,但是怎么做呢?你知道吗


Tags: djangonamefromimportselfmodelreturnmodels
1条回答
网友
1楼 · 发布于 2024-09-27 07:34:17

在我看来,您需要使用ManyToMany关系和through模型(这样您就可以为Borrow模型的每一行存储额外的信息)

...

class Borrow(models.Model):
    borrowed_from_date = models.DateField(_("borrow Date"), default=0)
    borrowed_to_date = models.DateField(_("return Date"), default=3)
    actual_return_date = models.DateField()
    borrowed_by = models.ForeignKey(Member, on_delete=models.CASCADE)
    book = models.ForeignKey(Book)
    def __str__(self):
        return self.id

...
class Member(AbstractUser):
    borrowed_books = models.ManyToManyField(Book, through='Borrow')

也许这个链接(https://docs.djangoproject.com/es/2.1/ref/models/fields/#django.db.models.ManyToManyField.through)可以更清楚地说明这一点。你知道吗

相关问题 更多 >

    热门问题