mysql - Django form performance -
i asked in code review rejected cause of "broken code." why i'm asking here. site more appropriate question code review one.
in app, user can modify course created. 1 field "teacher" field , user can select different person teacher. foreignkey creates 138 duplicated queries , can't figure out how make more efficient.
model:
class coursecatalog(models.model): course_name = models.charfield(verbose_name="course name", max_length=50) course_desc = models.textfield(verbose_name="course description") teacher = models.foreignkey(teacher, blank=true, null=true, verbose_name='course owner', on_delete=models.protect) ... view:
class editcoursecatalog(updateview): model = coursecatalog fields = ['course_name','course_desc', 'teacher'] template_name = 'school/course_catalog/new_edit_form.html' template:
... <h3>course form</h3> {{ user.teacher }} <form action="" method="post">{% csrf_token %} {{form|crispy}} ... here query debug duplicated 138 times. difference between queries school_familymember.id = 220.
select `school_familymember`.`id`, `school_familymember`.`password`, school_familymember.last_login, school_familymember.is_superuser, school_familymember.username, school_familymember.first_name, school_familymember.last_name, school_familymember.email.school_familymember.is_staff, school_familymember.is_active, school_familymember.date_joined, school_familymember.family_id, school_familymember.middle_name, school_familymember.family_member_role_id, school_familymember.address1, school_familymember.address2, school_familymember.city, school_familymember.state, school_familymember.zip_code, school_familymember.notes, school_familymember.gender, school_familymember.phone_number, school_familymember.cell_phone_number school_familymember school_familymember.id = 220
the teacher model foreign key familymember table , think i'm having issue. i'm wondering if there way make 1 single query collect family names , ids , use drop down list in form. can built in form managers or have scrap , create queries in view , pass them form?
class teacher(models.model): family_member = models.onetoonefield(familymember, verbose_name='name') notes = models.textfield(blank=true)
create custom model form, , in __init__ method change teachers queryset use select_related more efficient.
class coursecatalogform(forms.modelform): class meta: fields = ['course_name','course_desc', 'teacher'] def __init__(self, *args, **kwargs): super(coursecatalogform, self).__init__(*args, **kwargs) self.fields['teacher'].queryset = self.fields['teacher'].queryset.select_related('family_member') then use new model form class in view instead of specifying fields.
class editcoursecatalog(updateview): model = coursecatalog template_name = 'school/course_catalog/new_edit_form.html' form_class = coursecatalogform
Comments
Post a Comment