何时使用多通和多通关系

2024-09-28 17:00:19 发布

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

下面是一个大学数据库,以及它的评级。下面是我的想法

  1. 每个班级(批次,例如:2009年批次)属于一个部门
  2. 每个系(例如:药学系)都属于一所学院

因为我特别关注收视率。我想给一批人打分,在那里用经理或者一些模型的方法,我可以计算出总的院系或者学院的评分。你知道吗

  1. 每个班级都有等级

注意:对于一个类,可能有许多不同用户的评分。所以,我想总评分或平均评分应该通过一种方法来完成!你知道吗

到目前为止我就是这样做的

class Rating(models.Model):
    positive = models.FloatField(default=0)
    negative = models.FloatField(default=0)

class College(models.Model):
    name = models.CharField(max_length=200)
    website = models.URLField()

class Department(models.Model):
    name = models.CharField(max_length=200)
    college = models.ForeignKey(College)

class Batch(models.Model):
    passout_year = models.IntegerField(max_length=4)
    department = models.ForeignKey(Department)
    rating = models.ForeignKey(Rating)

此架构有一些问题!你知道吗

  • 每批只能有一个等级!不过,我正在寻找由许多用户签署的多个评级(尽管用户模型尚未集成)

  • 每批都属于一个系,每个系都属于一个学院。但是,我们也可以用另一种方式来思考这些关系

  • 每个学院有多个系,每个系有多个批次。。每个批次有多个院系(例如:2009年可能有多个院系),每个院系可以在多个学院

那么,我应该用ManyToManyField而不是ForeignKey吗?你知道吗

我应该是什么样子?你知道吗

我认为最重要的变化之一是

class Rating(models.Model):
    ..
    ..
    user = models.ForeignKey(django.contrib.auth.models.User)

class College(models.Model):
    ..
    ..
    departments = models.ManyToManyField(Department)

class Department(models.Model):
    ..
    college = models.ForeignKey(College)
    batches = models.ManyToManyField(Batch)

class Batch(models.Model):
    ..
    department = models.ForeignKey(Department)
    rating = models.ManyToMany(Rating)

这样对吗?如果不是应该怎么看

谢谢


Tags: 用户modelmodelsbatch评分lengthmaxclass
1条回答
网友
1楼 · 发布于 2024-09-28 17:00:19

下面是:

from django.contrib.auth.models import User#First import user
lass Rating(models.Model):
    ..
    ..
    user = models.ForeignKey(User)

class College(models.Model):
    ..
    ..
    departments = models.ManyToManyField(Department)

class Department(models.Model):
    ..
    college = models.ForeignKey(College)
    batches = models.ManyToManyField(Batch)

class Batch(models.Model):
    ..
    department = models.ForeignKey(Department)
    rating = models.ManyToMany(Rating)

当您建立多对多关系时,Django会自动创建一个桥接实体。你知道吗

相关问题 更多 >