Я создаю сайт для регистрации студентов.Таким образом, в основном это разделено на 3 части
1. A student register model which take the name, fathername, etc of student.
2. A student fee model which use foreignkey to get register student.
3. ModelForm for showing student fee model to enter data.
Теперь проблема, если я хочу заполнить студенческий взнос 1 класса, это показывает всех студентов других классов, но я хочу, чтобы фильтр студентов соответствовал их классами их имя показывают, а перед ними редактируемую форму оплаты и форму ожидающей оплаты.
По некоторым сведениям я узнал о ModelForm
экземпляре, я написал код для автоматического добавления зарегистрированных студентов в плату за обучение.
def student_fee(request):
# add a selection field to a variable for filtering student_class below this.
students = StudentRegister.objects.filter(student_class="1")
....
for x in students:
if not StudentFee.objects.filter(student=x):
StudentFee.objects.create(student=x, fee=0, pending_fee=0)
Но для instance
я должен знать первичный ключ каждого студента, которого я могу пройти через них, но он получает только последний элемент.
models.py
class StudentRegister(models.Model):
student_image = models.ImageField(upload_to="register_student", blank=True)
student_class = models.CharField(max_length=2, choices=STUDENT_CLASS, default="1")
mobile_number = models.CharField(max_length=50)
student_name = models.CharField(max_length=50)
father_name = models.CharField(max_length=50)
mother_name = models.CharField(max_length=50)
address = models.CharField(max_length=200)
student_fee = models.CharField(max_length=10, default="0")
Date_Of_Birth = models.DateField(auto_now=False)
admission_fee = models.CharField(max_length=10)
Admission_date = models.DateField(auto_now=False)
adhaar_no = models.CharField(max_length=100)
def __str__(self):
return "%s class: %s" % (self.student_name, self.student_class)
class StudentFee(models.Model):
student = models.ForeignKey(StudentRegister, on_delete=models.CASCADE)
fee = models.CharField(max_length=20)
pending_fee = models.CharField(max_length=20)
def __str__(self):
return "%s " % (self.student)
forms.py
class StudentFeeForm(forms.ModelForm):
class Meta:
model = StudentFee
fields = '__all__'
views.py (это грязно, извините)
def student_fee(request):
# add a selection field to a variable for filtering student_class below this.
students = StudentRegister.objects.filter(student_class="1")
real = StudentFee.objects.all()
# student_form = StudentFeeForm(request.POST or None)
student_form = StudentFeeForm(request.POST)#, instance=students)
# print(dir(students))
q = (students.get(pk=1))
global list_student_pk
list_student_pk = []
for x in students:
list_student_pk.append(x.pk)
student_get_instance = StudentFeeForm(instance=q)
# print(student_get_instance)
# This thing done don't touch----------------------------------
for x in students:
if not StudentFee.objects.filter(student=x):
StudentFee.objects.create(student=x, fee=0, pending_fee=0)
if request.method == "POST":
if student_form.is_valid():
pass # this thing will done after the form problem solved.
# till here ==========================================================
return render(request, "student_fee_home.html", {"students": students, "real":real, "student_form":student_form, "list_student_pk":list_student_pk, "student_get_instance":student_get_instance})
Я хочу, чтобы модели модели фильтровали по классу.Затем модель студенческого взноса, которая уже имеет зарегистрированного студента (имя студента, взнос, ожидающий взнос) может редактировать.Чтобы на нем отображалось имя ученика и прямо перед ним редактируемая форма оплаты и ожидающая форма оплаты.
Сейчас это работает так, показывая всех учащихся всех классов, но я хочу, чтобы имя учащихсяпоказать вместо поля выбора.Насколько мне известно, вариант отображения отображаемых имен учеников непосредственно из моделей, а затем с помощью формы введите данные о плате и ожидающей оплате, а затем создайте ее в моделях.