Есть ли способ фильтрации данных при передаче их в ModelForm и как мы можем их редактировать? - PullRequest
0 голосов
/ 29 мая 2019

Я создаю сайт для регистрации студентов.Таким образом, в основном это разделено на 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})

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

Сейчас это работает так, показывая всех учащихся всех классов, но я хочу, чтобы имя учащихсяпоказать вместо поля выбора.Насколько мне известно, вариант отображения отображаемых имен учеников непосредственно из моделей, а затем с помощью формы введите данные о плате и ожидающей оплате, а затем создайте ее в моделях.

none

1 Ответ

1 голос
/ 30 мая 2019

djang0-фильтр поможет вам при фильтрации

pip install django-filter

Model.py

    class Dispatcher(models.Model):
        _safedelete_policy = SOFT_DELETE

        Individual = 'Individual'
        Company = 'Company'

        TYPES = [
            (Individual, 'Individual'),
            (Company, 'Company')
        ]
    type = models.CharField(max_length=255,
                                choices=TYPES,
                                default=Individual)

Views.py

class DispatcherViewSet(viewsets.ModelViewSet):
    queryset = Dispatcher.objects.all()
    serializer_class = DispatcherSerializer
    filter_backends = (DjangoFilterBackend,)
    filterset_fields = ['type']
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...