Tôi có người quản lý tùy chỉnh. Tôi muốn sử dụng nó cho các đối tượng liên quan. Tôi đã tìm thấy use_for_related_fields trong tài liệu. Nhưng nó không làm việc theo cách tôi đã sử dụng nó:Cách sử dụng trình quản lý tùy chỉnh với các đối tượng liên quan?
class RandomQueryset(models.query.QuerySet):
def randomize(self):
count = self.count()
random_index = random.randint(0, count - 1)
return self.all()[random_index]
class RandomManager(models.Manager):
use_for_related_fields = True
def get_query_set(self):
return RandomQueryset(self.model, using=self._db)
def randomize(self):
return self.get_query_set().randomize()
tôi đã sử dụng nó cho một mô hình:
>>> post = PostPages.default_manager.filter(image_gallery__isnull=False).distinct().randomize()
Và cố gắng làm tương tự với m2m đối tượng liên quan:
>>> post.image_gallery.randomize()
Đã xảy ra lỗi:
AttributeError: 'ManyRelatedManager' object has no attribute 'randomize'
có thể sử dụng trình quản lý tùy chỉnh theo cách tôi đã làm không? Nếu vậy, làm thế nào để bạn làm cho nó hoạt động?
Sửa
mô hình của tôi:
class ShivaImage(models.Model, ImageResizing):
image = models.ImageField(upload_to='img')
slide_show = models.BooleanField()
title = models.CharField(max_length=100)
text = models.TextField(max_length=400)
ordering = models.IntegerField(blank=True, null=True)
objects = RandomManager()
class PostPages(models.Model):
image_gallery = models.ManyToManyField(ShivaImage, blank=True,
related_name='gallery',)
# all the other fields...
objects = RandomManager()
tôi xác định người quản lý trong cả hai mô hình. Nếu tôi hiểu đúng, 'đối tượng' có nghĩa là người quản lý mặc định. Xem chỉnh sửa câu hỏi, tôi đã thêm các mô hình trong đó. – I159
Trình quản lý _first_ được xác định trở thành trình quản lý mặc định, cho dù nó được gọi là 'đối tượng' hay không ... –
Uoo hooo! Nó hoạt động! Nhiều khả năng có một số sai lầm rất ngu ngốc. Bởi vì bây giờ nó là ok. – I159