django - Django 创建多对多关系
问题描述
我正在构建一个应用程序,用户可以在其中添加他们正在学习的课程及其详细信息。我的目的是根据课程代码查看所有注册课程的用户,而不考虑课程的其他详细信息(例如注册时间)。目前,
我的用户模型:
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',)
感谢您提前提供的所有帮助!
解决方案
我建议你应该有两种模型,一种用于课程,另一种用于用户。目前您正在将用户存储在课程模型中。
推荐阅读
- django - 如何在多对多关系(通过)中找到 django 对象?
- c# - 错误 HRESULT:[0xC00D36B4] 在 sharpDx c# 中从扩展屏幕录制屏幕时
- python - 在 NetworkX 中打印节点名称
- html - 侧边栏没有移动到“主”的左侧,并且 CSS 网格在“横向平板电脑”上没有按预期工作
- powershell - 表达式或语句中出现意外的标记“tut7.4”
- python - 如何将一行从一个txt文件写入另一个?
- r - 我需要从中创建一个箱线图,其中区域需要在 X 轴上,年度数据需要在箱线图中,
- windows - 限制 UDS 连接数
- laravel-8 - 基于角色的 redirectuser() 方法不起作用
- typescript - 未捕获的类型错误:无法读取未定义的属性(读取“__H”)