Django создание отношений ManyToMany - PullRequest
0 голосов
/ 05 апреля 2020

Я создаю приложение, в котором пользователи могут добавлять свои курсы с указанием своих данных. Мое намерение состоит в том, чтобы просмотреть всех пользователей, зачисленных на курс, на основе кода курса, независимо от других деталей курса (таких как время зачисления). В настоящее время

моя модель пользователя:

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', но я застрял на том, как запрос должен получить список пользователей.

my текущий запрос:

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',)

Заранее спасибо за помощь!

1 Ответ

0 голосов
/ 05 апреля 2020

Я предлагаю вам иметь две модели, одну для курса, а другую для пользователей. В настоящее время вы храните пользователей в модели курса.

...