var color = "#";
for (k = 0; k < 3; k++) {
color += ("0" + (Math.random()*256|0).toString(16)).substr(-2);
}
Разбивка того, как это работает:
Math.random()*256
получает случайное число (с плавающей запятой) от 0 до 256 (от 0 до 255 включительно)
Пример результата: 116.15200161933899
Добавление |0
убирает все после десятичной точки.
Пример: 116.15200161933899 -> 116
Использование .toString(16)
преобразует это число в шестнадцатеричное (основание 16).
Пример: 116 -> 74
Другой пример: 228 -> e4
Добавление "0"
дополняет его нулями. Это будет важно, когда мы получим подстроку, поскольку наш конечный результат должен иметь два символа для каждого цвета.
Пример: 74 -> 074
Еще один пример: 8 -> 08
.substr(-2)
получает только два последних символа.
Пример: 074 -> 74
Другой пример: 08 -> 08 (если бы мы не добавили "0"
, это привело бы к «8» вместо «08»)
Цикл for
запускает этот цикл три раза, добавляя каждый результат в строку цвета, создавая что-то вроде этого:
#7408e4
Конечно. Просто определите настраиваемую форму с вашим обязательным полем, переопределенным для установки required = True, и используйте ее в своем классе администратора.
class MyForm(forms.ModelForm):
required_field = forms.CharField(required=True)
class Meta:
model = MyModel
class MyAdmin(admin.ModelAdmin):
form = MyForm
class MyInlineAdmin(admin.ModelAdmin):
model = MyModel
Итак, MyAdmin использует переопределенную форму, а MyInlineAdmin - нет.