Tôi nhầm lẫn về cách sử dụng đúng trình quản lý mô hình tùy chỉnh Django - dựa trên tài liệu bạn có thể tạo một chuỗi các nhà quản lý cho một mô hình như một cách lọc. Nhưng tại sao không tạo ra một lớp quản lý với một loạt các chức năng để lọc? Là một phương pháp tốt hơn so với phương pháp khác? và tại sao?Trình quản lý mô hình tùy chỉnh Django
Ví dụ:
class MaleManager(models.Manager):
def get_query_set(self):
return super(MaleManager, self).get_query_set().filter(sex='M')
class FemaleManager(models.Manager):
def get_query_set(self):
return super(FemaleManager, self).get_query_set().filter(sex='F')
class Person(models.Model):
first_name = models.CharField(max_length=50)
last_name = models.CharField(max_length=50)
sex = models.CharField(max_length=1, choices=(('M', 'Male'), ('F', 'Female')))
people = models.Manager()
men = MaleManager()
women = FemaleManager()
so
class PersonManager(models.Manager):
def males(self):
return super(MaleManager, self).get_query_set().filter(sex='M')
def females(self):
return super(FemaleManager, self).get_query_set().filter(sex='F')
class Person(models.Model):
first_name = models.CharField(max_length=50)
last_name = models.CharField(max_length=50)
sex = models.CharField(max_length=1, choices=(('M', 'Male'), ('F', 'Female')))
people = PersonManager()
Person.people.females() # to get list of females
Person.people.males() # to get a list of males
Có nhưng hai phương pháp đang trả về querysets ... vì vậy sẽ không Person.objects.females.filter (first_name = 'Jane') vẫn hoạt động? ... –
@ 9-bit: Đừng quên thực sự gọi phương thức. –
@ IgnacioVazquez-Abrams ý của bạn là gì? Sẽ không Person.people.females.filter (first_name = 'Jane') gọi phương pháp sau đó lọc? –