Django теперь включает тип UUIDField , так что вам не нужен какой-либо пользовательский код или внешний пакет, предложенный Срикант Чунди. В этой реализации используются строки HEX с черточками, поэтому текст довольно безопасный для детей, кроме 1337 выражений, таких как abad1d3a:)
Вы можете использовать его как псевдоним pk
для поля uuid
в качестве первичный ключ:
import uuid
from django.db import models
class MyModel(models.Model):
uuid = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
# other fields
Обратите внимание, однако, что при маршрутизации к этому представлению в urls.py вам необходимо другое регулярное выражение, как , упомянутое здесь Например:
urlpatterns = [
url(r'mymodel/(?P[^/]+)/, MyModelDetailView.as_view(),
name='mymodel'),
]
Как насчет этой функции:
function getNextMonthN($date, $n = 1) {
$newDate = strtotime('+' . $n . ' months', $date);
if (date('j', $date) !== (date('j', $newDate))) {
$newDate = mktime(0, 0, 0, date('n', $newDate), 0, date('Y', $newDate));
}
return $newDate;
}
Есть другое решение на Сайт руководства php.net под записью strtotime в комментариях .
Обновление:
Это даст вам количество дней в данном месяце:
echo date('t', $timestamp);
См .: date ()
Старый ответ:
Я не уверен в алгоритме, о котором вы думаете, но я считаю, что это поможет вам:
echo date('d-M-y', strtotime('next month'));
Поскольку месяцы очень разные по размеру, не лучший способ установить следующий месяц примерно так: этот день, следующий месяц, если только этот день не существует в следующем месяце.
Пример:
June 5, 2009, next month would be July 5, 2009
August 31, 2009, next month would be September 30, 2009
или просто, strtotime ("+ 1 месяц")
Это вернет правильную метку времени для $ X месяцев вперед: mktime (0,0,0, date ("m") + $ X, date ('d'), date ("Y"));
Я рекомендую прочитать следующий комментарий на php.net. strtotime () (php.net)
Изменить: следующий ответ дает «сводку» ссылки, которую я разместил для тех, кто не может расшифровать показанный там контент.
Пробовали это как шутку, и это действительно работает
strtotime('last day next month')
Итак:
$today_next_month = strtotime('this day next month');
$last_day_next_month = strtotime('last day next month');
if (date('d', $today_next_month) < date('d', $last_day_next_month)){
$date = date('m-d-Y', $last_day_next_month);
} else {
$date = date('m-d-Y', $today_next_month);
}
echo "And the winner is : $date<br/>";