Django创建ManyToMany关系

问题描述 投票:0回答:1

我正在构建一个应用程序,用户可以在其中添加他们正在学习的课程及其详细信息。我的目的是根据课程代码查看所有已注册课程的用户,而不考虑课程的其他详细信息(例如注册时间)。当前,

我的用户模型:

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-models django-forms
1个回答
0
投票

我建议您应该有两个模型,一个用于课程,另一个用于用户。当前您正在将用户存储在课程模型中。

© www.soinside.com 2019 - 2024. All rights reserved.