【发布时间】:2018-02-07 04:05:55
【问题描述】:
我有一个模型,该模型超时会有几千到几万个实例。每一个都是独一无二的。在 Django 管理界面中,我可以看到所有实例并访问它们等。有没有办法让我限制我可以看到的实例数量,让我说 20 或 50 按任意顺序排序,我可以像页面一样浏览它们?我问是因为加载所有数千个实例可能会阻塞我的服务器。那么如何限制呢?
如果有帮助,我的模型如下:
#Student Type
class StudentType(models.Model):
name = models.CharField(max_length = 400, null=True, blank = True, verbose_name = 'Name')
def __unicode__(self):
return self.name
#Old -- Deprecated:Student Images Folder
def student_directory_path(instance, filename):
return 'students/%s' % filename
#Student Images Folder
def st_profile(instance, filename):
# file will be uploaded to MEDIA_ROOT/user_<id>/<filename>
return 'students/%s' % filename
#Student Profile
class ProfileStudent(models.Model):
user = models.OneToOneField(app_settings.USER_MODEL,)
created = models.DateTimeField(auto_now=False, auto_now_add=True, blank = False, null = False, verbose_name = 'Creation Date')
email = models.EmailField(max_length=254, blank=True, null=True)
name = models.CharField(max_length = 400, null=True, blank = True, verbose_name = 'Name')
last_name = models.CharField(max_length = 400, null=True, blank = True, verbose_name = 'Last Name')
phone_number = models.CharField(max_length = 12, null=True, blank = True, verbose_name = 'Phone Number')
city = models.ForeignKey(City, null=True, blank = True, verbose_name = 'City')
adress = models.CharField(max_length = 400, null=True, blank = True, verbose_name = 'Address')
bank_account = models.CharField(max_length = 400, null=True, blank = True, verbose_name = 'Bank Account')
braintree_submerchant_account = models.CharField(max_length = 400, null=True, blank = True, verbose_name = 'Braintree Account')
date_of_birth = models.DateField(auto_now=False, auto_now_add=False, blank = True, null = True, verbose_name='Date of birth')
GENDER = (
('male','Male'),
('female','Female'),
)
gender = models.CharField(max_length=20, choices=GENDER, blank = True, null=True, verbose_name = 'Gender' )
language = models.ManyToManyField(Language)
student_type = models.ForeignKey(StudentType, null = True, blank = True, verbose_name='Type')
profile_image = models.ImageField(upload_to=st_profile, blank = True, null = True, default='/perfil.png')
is_embassador = models.BooleanField(default=False)
is_new = models.BooleanField(default=True)
# True if user from the old web:
legacy = models.BooleanField(default=False, blank=True)
legacy_id = models.IntegerField(default=0, null=True, blank=True)
# Used to invite other users: created at signup
invite_code = models.ForeignKey(PromotionalCode, default=None, blank=True, null=True)
class Meta:
verbose_name_plural = 'Students'
verbose_name = 'Student'
def __unicode__(self):
return "%s" % (self.user.email)
def save(self, *args, **kwargs):
if not self.pk:
invite_code = PromotionalCode()
invite_code.code = uuid.uuid4().hex[:6].upper()
try:
invite_code.pc_type = PromotionalCodeType.objects.all().filter(pk=1).get()
except:
invite_code.pc_type = None
invite_code.save()
self.invite_code = invite_code
super(ProfileStudent, self).save(*args, **kwargs)
【问题讨论】:
-
这是 Django 中的默认行为,对象列表是分页的(每页 100 个项目,您可以在 ModelAdmin 中调整)。
标签: python django admin models