Как я применяю модель Django опции Meta к моделям, которые я не записал?

Вот возможное решение, если вы согласны использовать пакет scatterplot3d вместо rgl. Это в основном то же самое, но не интерактивное. Вот ваш код, модифицированный для получения ожидаемого результата.

x           = matrix(NA,100,6)
#x value
x[,1]       = runif(100, 0, 10)
#y value
x[,2]       = runif(100, 0, 10)
#z value
x[,3]       = x[,1]+x[,2]
#additional value
x[,4]       = runif(100, 0, 1)

#find out in which interval each additional value is
intervals   = seq(0,1,1/10)
x[,5]       = findInterval(x[,4], intervals)

#produce gradient of colors
#you can define different colors (two or more)
gradient <- colorRampPalette(colors = c("yellow", "green", "blue"))
colours <- gradient(length(intervals))

x[,6]       = colours[x[,5]]

library(scatterplot3d)
png('3d.png', width = 600, height = 400)
layout(matrix(1:2, ncol=2), width = c(3, 1), height = c(1, 1))
scatterplot3d(as.numeric(x[,1]),as.numeric(x[,2]), as.numeric(x[,3]), type = 'p',
       cex.symbols = 1.25, color=x[,6], pch = 16, xlab = "x(t)", ylab = "y(t)", zlab = "z(t)")
plot(x = rep(1, 100), y = seq_along(x[,6]), 
     pch = 15, cex = 2.5, 
     col = gradient(length(x[,6])), 
     ann = F, axes = F, xlim = c(1, 2))
axis(side = 2, at = seq(1, nrow(x), length.out = 11), 
     labels = 1:11,
     line = 0.15)
dev.off()

Это построит следующий график

3D-image-plot

5
задан hekevintran 6 April 2009 в 02:21
поделиться

4 ответа

Ответ паоло является большим; я ранее не знал о новой поддержке прокси. Единственная проблема с ним - то, что необходимо быть нацелены на код к модели OrderedUser - который в некотором смысле подобен простому выполнению a User.objects.filter(....).order_by('username'). Другими словами, это является менее подробным, но необходимо явно написать код для предназначения для него. (Конечно, как упомянуто, необходимо было бы также быть на соединительной линии.)

Мой смысл состоит в том, что Вы хотите все User запросы, которые будут заказаны, включая в приложениях сторонних производителей, которыми Вы не управляете. При таком обстоятельстве, monkeypatching базовый класс относительно легко и очень маловероятен вызвать любые проблемы. В центральной части (такой как Ваш settings.py), Вы могли сделать:

from django.contrib.auth.models import User
User.Meta.ordering = ['username']

ОБНОВЛЕНИЕ: Django 1.5 теперь поддерживает настраиваемые модели User.

6
ответ дан 18 December 2019 в 09:10
поделиться

Можно или разделить Пользователя на подклассы:

class OrderedUser(User):
    class Meta:
        ordering = ['-id', 'username']

Или Вы могли использовать упорядочивание в ModelAdmin:

class UserAdmin(admin.ModelAdmin):
    ordering = ['-id', 'username']

# unregister user since its already been registered by auth
admin.site.unregister(User)
admin.site.register(User, UserAdmin)

Примечание: метод ModelAdmin только изменит упорядочивание в администраторе, это не изменит упорядочивание запросов.

3
ответ дан 18 December 2019 в 09:10
поделиться

Это - то, как руководство Django рекомендует сделать это:

Вы могли также использовать модель прокси для определения другого упорядочивания значения по умолчанию на модели. Стандартная модель User не имеет никакого упорядочивания, определенного на нем (намеренно; сортировка является дорогой, и мы не хотим делать все это время, когда мы выбираем пользователей). Вы могли бы хотеть регулярно заказать атрибутом имени пользователя при использовании прокси. Это легко:

class OrderedUser(User):
    class Meta:
        ordering = ["username"]
        proxy = True

Теперь запросы обычного пользователя будут unorderd, и запросы OrderedUser будут заказаны именем пользователя.

Обратите внимание, что, чтобы это работало, у Вас должен будет быть магистральный контроль Django, поскольку это является довольно новым.

Если у Вас не будет доступа к нему, то необходимо будет избавиться от части прокси и реализовать ее тот путь, который может стать громоздким. Проверьте эту статью о том, как выполнить это.

9
ответ дан 18 December 2019 в 09:10
поделиться

Свяжитесь с автором и попросите, чтобы они внесли изменение.

0
ответ дан 18 December 2019 в 09:10
поделиться
Другие вопросы по тегам:

Похожие вопросы: