Как сохранить данные ModelFrom в модели, имеющей внешний ключ модели пользователя в Django? - PullRequest
0 голосов
/ 26 мая 2020

У меня есть модель Detail, которая имеет ForeignKey модели User. У меня также есть UpdateStudentDetailForm ModelForm, который основан на модели Detail, но также имеет дополнительное поле, которое представляет собой раскрывающийся список пользователей (студентов). Я использую эту ModelForm для ввода данных от текущего пользователя (учителя). Пользователь (учитель) выбирает пользователя (ученика) из раскрывающегося списка, заполняет другие поля и отправляет форму. Теперь я хочу, чтобы отправленные данные были сохранены в модели Detail пользователя (ученика), выбранной пользователем (учителем). Что мне нужно сделать в моем views.py, чтобы выполнить sh это?

Моя Detail Модель в models.py указана ниже:

class Detail(models.Model):
    user = models.ForeignKey(User, on_delete=models.CASCADE)
    subject = models.CharField(max_length=50)
    skype_session_attendance = models.FloatField(validators=[MinValueValidator(0), MaxValueValidator(20)], verbose_name="Skype Session Attendances (of this subject, in numbers)", help_text="Enter the numbers of skype sessions of this subject, the student attended out of 20.")
    internal_course_marks = models.FloatField(validators=[MinValueValidator(0), MaxValueValidator(40)], verbose_name="Internal Course Marks (of this subject, in numbers)", help_text="Enter the total internal course marks of this subject, the student obtained out of 40.")
    programming_lab_activity = models.FloatField(validators=[MinValueValidator(0), MaxValueValidator(25)], verbose_name="Programming Lab Activities (of this subject, in numbers)", help_text="Enter the total numbers of programming lab activities of this subject, the student participated in, out of 25.")
    mid_term_marks = models.FloatField(validators=[MinValueValidator(0), MaxValueValidator(45)], verbose_name="Mid_Term Marks (of this subject, in numbers)", help_text="Enter the total mid-term marks of this subject, the student obtained out of 45.")
    final_term_marks = models.FloatField(validators=[MinValueValidator(0), MaxValueValidator(90)], verbose_name="Final_Term Marks (of this subject, in numbers)", help_text="Enter the total final-term marks of this subject, the student obtained out of 90.")

    def __str__(self):
        return f'{self.user.username}-{self.subject}'

My UpdateStudentDetailsForm в Forms.py ниже:

STUDENTS_LIST = []
for usr in User.objects.all():
    if not usr.is_staff and not usr.is_superuser:
        STUDENTS_LIST.append(str(usr.first_name + ' ' + usr.last_name + ' - ' + usr.username))

class UpdateStudentDetailsForm(forms.ModelForm):
    stds = forms.CharField(widget=forms.Select(choices=STUDENTS_LIST), label='Select a Student')

    class Meta:
        model = Detail

        fields = ['stds', 'subject', 'skype_session_attendance', 'internal_course_marks', 'programming_lab_activity', 'mid_term_marks', 'final_term_marks']

1 Ответ

0 голосов
/ 26 мая 2020

Вы должны попробовать:

user = models.OneToOneField(User, on_delete=models.CASCADE)

в вашей Детальной модели.

...