47 lines
1.8 KiB
Python
47 lines
1.8 KiB
Python
from django.db import models
|
|
|
|
# Represents any object for which reviews can be made. (Universities, Professors, etc.)
|
|
class RateableEntity(models.Model):
|
|
# The human-readable name of this entity.
|
|
name = models.CharField(max_length=256)
|
|
|
|
class Meta:
|
|
abstract = True
|
|
|
|
# A review represents any single data entry to the database.
|
|
class Review(models.Model):
|
|
# An integer rating in the domain [1, 5]
|
|
rating = models.IntegerField(default=1)
|
|
# The textual content of the review.
|
|
content = models.TextField()
|
|
# An integer representing the number of times a user found this review helpful.
|
|
helpful_vote_count = models.IntegerField(default=1)
|
|
# An integer representing the number of times a user found this review unhelpful.
|
|
unhelpful_vote_count = models.IntegerField(default=1)
|
|
# A foreign key referencing the entity for which this review was made.
|
|
rateable_entity_id = models.ForeignKey(RateableEntity, on_delete=models.CASCADE)
|
|
|
|
# A RateableEntity for universities.
|
|
class University(RateableEntity):
|
|
pass
|
|
|
|
# A RateableEntity for professors, who belong to one or more university.
|
|
class Professor(RateableEntity):
|
|
# The universities that this professor teaches or has taught at.
|
|
university = models.ManyToManyField(University)
|
|
|
|
# A RateableEntity for courses, which belong to a university, and have one or more professors.
|
|
class Course(RateableEntity):
|
|
# The university that this course belongs to.
|
|
university = models.ForeignKey(University, on_delete=models.CASCADE)
|
|
# A list of professors that teach this course.
|
|
professors = models.ManyToManyField(RateableEntity)
|
|
|
|
# Create your models here.
|
|
class UniversityReview(models.Model):
|
|
university_name = models.CharField(max_length=200)
|
|
username = models.CharField(max_length=200)
|
|
title = models.CharField(max_length=200)
|
|
date_published = models.DateTimeField('date published')
|
|
content = models.CharField(max_length=200)
|
|
|