私は20カウント・フィールドがあるUserモデルがあります:ページング・ポリシーのデータ・クエリーセット・カウントの重み付けは?
class User(models.Model):
username = models.CharField(max_length=16)
password = models.CharField(max_length=40) # sha1
real_name = models.CharField(max_length=12, null=True,blank=True)
phone = models.CharField(max_length=11)
email = models.EmailField(blank=True, null=True)
qq = models.CharField(max_length=10, null=True, blank=True)
address = models.CharField(max_length=64, blank=True, null=True)
id_card = models.CharField(blank=True, null=True, max_length=18, validators=[RegexValidator(regex='^.{18}$', message='身份证长度必须为18', code='nomatch')])
id_card_img_front = models.CharField(max_length=256, blank=True, null=True)
id_card_img_back = models.CharField(max_length=256, blank=True, null=True)
nickname = models.CharField(max_length=16, blank=True, null=True)
profile = models.CharField(max_length=256, blank=True, null=True, default=' ')
usertype = models.ForeignKey(to='UserType', default=1, blank=True)
user_c_type = models.CharField(max_length=4, null=True)
fixed_phone = models.CharField(max_length=16, null=True)
fax = models.CharField(max_length=16, null=True)
main_bussiness = models.CharField(max_length=16, null=True)
main_industry = models.CharField(max_length=16, null=True)
company_name = models.CharField(max_length=32, null=True)
company_address = models.CharField(max_length=32, null=True)
province = models.CharField(max_length=32, null=True, default="--省--")
town = models.CharField(max_length=32, null=True, default="--市--") # 省市县
country_level = models.CharField(max_length=32, null=True, default="--县--")
ctime = models.DateTimeField(auto_now_add=True)
uptime = models.DateTimeField(auto_now=True)
status = models.CharField(max_length=1, null=True, default=1)
そして、私のDjangoプロジェクトでは、私は、ユーザーリストのページングを実現するためにページネータを使用したいです。
データベース内のユーザーの数が10,000行を超えないためです。
だから、私は自分のデータベースのすべてのユーザーを取得して、それらを改ページすることができますか?
user_all = models.User.objects.all()
paginator = Paginator(user_all, 10)
try:
user_list_page = paginator.page(page_number)
except PageNotAnInteger:
user_list_page = paginator.page(1)
except EmptyPage:
user_list_page = paginator.page(paginator.num_pages)
この方法(ユーザーデータのすべての行を照会)が非効率であるかどうかはわかりません。
または、データベースからユーザーを照会するバランスをとるにはどうしたらいいですか?正の限界数(数を超えて、私はページメソッドを使うことができるよりも少ないページ分割メソッドを変更する必要があります)?
また、ユーザーを改ページする方法がありますか?
これについて間違っていると思われることは明確ではありません。それがあなたがページャーを使う方法です。そして、それはあなたのユーザーのすべての行を取得していません。 –
私の方法を正確かつ効率的に使用することを意味しますか?私は 'models.User.objects.all()'を使用してデータベースからすべてのユーザーデータを取得すると思うからです。つまり、10(page_size)行のユーザーデータを取得するだけですか?あなたが言うように、Paginatorはこれをどのように実装できますか? – aircraft
Querysetは遅延です。 'User.objects.all()'は実際にはクエリを実行しません。 –