我正在构建一个应用程序,用户可以在其中添加他们正在学习的课程及其详细信息。我的意图是根据课程代码查看所有注册课程的用户,而与课程的其他详细信息(例如注册时间)无关。目前,
我的用户模型:
class Profile(AbstractUser):
bio = models.TextField()
university = models.CharField(max_length=50)
image = models.ImageField(default='profile_image/profile_default.png', upload_to='profile_image', blank=True)
friends = models.ManyToManyField("Profile", blank=True)
def __str__(self):
return self.username
我的课程模型是:
class Course(models.Model):
class Semester(models.TextChoices):
SPRING = '1', 'Spring'
SUMMER = '2', 'Summer'
FALL = '3', 'Fall'
WINTER = '4', 'Winter'
NONE = '0', 'None'
class Difficulty(models.TextChoices):
EASY = '1', 'Easy'
MEDIUM = '2', 'Medium'
HARD = '3', 'Hard'
FAILED = '4', 'Failed'
users = models.ManyToManyField(Profile,related_name='courses')
course_code = models.CharField(max_length=20)
course_university = models.CharField(max_length=100)
course_instructor = models.CharField(max_length=100)
course_year = models.IntegerField(('year'), validators=[MinValueValidator(1984), max_value_current_year])
course_likes = models.ManyToManyField(Profile, blank=True, related_name='course_likes')
course_dislikes = models.ManyToManyField(Profile, blank=True, related_name='course_dislikes')
course_semester = models.CharField(
max_length=2,
choices=Semester.choices,
default=Semester.NONE
)
course_difficulty = models.CharField(
max_length=2,
choices=Difficulty.choices,
default=Difficulty.MEDIUM
)
def __str__(self):
return self.course_code
def save(self, *args, **kwargs):
self.course_code = self.course_code.upper().replace(' ', '')
self.course_university = self.course_university.strip().lower()
self.course_instructor = self.course_instructor.strip().lower()
super(Course, self).save(*args, **kwargs)
如何查看具有相同课程号的所有用户?这种数据库结构适合这种用途吗?
我正在尝试构建一个名为'get_users_enrolled'
的方法,但是我一直在困扰查询应该如何获取用户列表。
我当前的查询:
def get_users_enrolled(self):
users = Courses.users.filter(course_code=self.course_code)
我的课程创建表格:
class CourseForm(forms.ModelForm):
course_code = forms.CharField(
label='',
max_length=12,
min_length=5,
required=True,
validators=[alphanumeric],
widget=forms.TextInput(
attrs={
"placeholder": "Course Code",
"class": "form-control"
}
)
)
instructor = forms.CharField(
label='',
max_length=50,
min_length=2,
required=True,
validators=[alphabetical],
widget=forms.TextInput(
attrs={
"placeholder": "Instructor Lastname",
"class": "form-control"
}
)
)
university = forms.CharField(
label='',
max_length=50,
min_length=2,
required=False,
validators=[alphanumeric],
widget=forms.TextInput(
attrs={
"placeholder": "University",
"class": "form-control"
}
)
)
course_year = forms.TypedChoiceField(
coerce=int,
choices=year_choices,
initial=current_year,
widget=forms.TextInput(
attrs={
"placeholder": "Term",
"class": "form-control"
}
)
)
class Meta:
model = Course
fields=('course_code','course_instructor','course_year','course_semester','course_difficulty',)
感谢所有的帮助!
答案 0 :(得分:0)
我建议您应该有两个模型,一个用于课程,另一个用于用户。当前,您正在将用户存储在课程模型中。