НОВЫЙ ОТВЕТ Используйте для этого библиотеку Glide. Эта библиотека также рекомендуется Google. См. Как округлить изображение с помощью библиотеки Glide?
СТАРЫЙ ОТВЕТ Просто добавьте это изображение в cardView
и установите высоту cardView на 0dp ... хитрость (в моем случае это была viewPager
с изображениями - просто замените viewPager
на ImageView
):
плагин jQuery mureSelectors поддерживает n-й тип (и многие другие селекторы). Я предлагаю либо использовать это, либо просто реализовать простой плагин, который реализует только точные селекторы вам нужны. Вы должны иметь возможность копировать-вставить код оттуда.
Счастливый взлом!
-121--2348321-Исходя из моего собственного опыта, это в пределах метров.
-121--3665321- Использование order _ by ('?')
убьет сервер базы данных на второй день производства. Лучшим способом является то, что описано в Получение случайной строки из реляционной базы данных .
from django.db.models.aggregates import Count
from random import randint
class PaintingManager(models.Manager):
def random(self):
count = self.aggregate(count=Count('id'))['count']
random_index = randint(0, count - 1)
return self.all()[random_index]
Вы можете создать менеджер в своей модели, чтобы делать такие вещи. Чтобы сначала понять, что такое менеджер, метод Painting.objects
- это менеджер, который содержит all ()
, filter ()
, get ()
и т. Д. Создание собственного менеджера позволяет вам предварительно фильтровать результаты и использовать все те же методы, а также ваши собственные методы для работы с результатами.
EDIT : Я изменил свой код, чтобы отразить метод order_by ['?']
. Обратите внимание, что менеджер возвращает неограниченное количество случайных моделей. Из-за этого я включил небольшой код использования, чтобы показать, как получить только одну модель.
from django.db import models
class RandomManager(models.Manager):
def get_query_set(self):
return super(RandomManager, self).get_query_set().order_by('?')
class Painting(models.Model):
title = models.CharField(max_length=100)
author = models.CharField(max_length=50)
objects = models.Manager() # The default manager.
randoms = RandomManager() # The random-specific manager.
Использование
random_painting = Painting.randoms.all()[0]
Наконец, вы можете иметь много менеджеров в своих моделях, поэтому не стесняйтесь создавать LeastViewsManager ()
или MostPopularManager ()
.
Решения с order_by ('?') [: N] чрезвычайно медленны даже для таблиц среднего размера, если вы используете MySQL (не знаю о других базах данных).
order_by ('?') [: N]
будет преобразовано в SELECT ... FROM ... WHERE ... ORDER BY RAND () LIMIT N
запрос.
Это означает, что для в каждой строке таблицы будет выполняться функция RAND (), затем вся таблица будет отсортирована в соответствии со значением этой функции, а затем будут возвращены первые N записей. Если ваши столы маленькие, это нормально. Но в большинстве случаев это очень медленный запрос.
Я написал простую функцию, которая работает, даже если в идентификаторах есть дыры (некоторые строки были удалены):
def get_random_item(model, max_id=None):
if max_id is None:
max_id = model.objects.aggregate(Max('id')).values()[0]
min_id = math.ceil(max_id*random.random())
return model.objects.filter(id__gte=min_id)[0]
Это быстрее, чем order_by ('?') Почти во всех случаях.