Итак, если вы ищете функцию из пакета car
, это qqPlot
, а не qqplot
.
Можете ли вы попробовать qqPlot(lm(a~b))
. Это вернет приведенный ниже сюжет.
Участок:
Я бы не стал вводить подобные ограничения в метод сохранения, это слишком поздно. Возникновение исключения не помогает пользователю, который неверно ввел данные, потому что это будет 500, и пользователь не получит форму с ошибками и т. Д.
Вы должны действительно проверить это в чистом методе Forms / ModelForms и вызвать ValidationError, поэтому form.is_valid()
возвращает false и вы можете отправить ошибки в форме обратно пользователю для исправления.
Также обратите внимание, что начиная с версии 1.2, Django прошла проверку модели .
Это будет выглядеть примерно так:
class Foo(models.Model):
# ... model stuff...
def clean(self):
if self.start_date > self.end_date:
raise ValidationError('Start date is after end date')
Как говорит @stefanw, удобнее для пользователя проверять чистый метод формы.
Этого достаточно, если вы уверены, что нет и никогда не будет другого способа изменить значение. Но поскольку вы редко можете быть в этом уверены, если согласованность базы данных важна, вы можете добавить еще одну проверку (в дополнение к форме), одну из:
Чтобы быть «полностью» уверенным, что база данных согласована, вы можете добавить ограничение уровня базы данных. Например. вы можете создать миграцию с помощью RunSQL и SQL, что-то вроде (не проверено):
migrations.RunSQL('ALTER TABLE app_event ADD CONSTRAINT chronology CHECK (start_date > end_date);')
(не проверено). Это может зависеть от базы данных, что, конечно, является недостатком.
В вашем примере это, вероятно, не стоит (неправильное время начала / окончания просто выглядит немного странно, но влияет только на одно несовместимое событие), и вам не нужны ручные изменения схемы. Но это полезно в тех случаях, когда последовательность важна.
РЕДАКТИРОВАТЬ : Вы также можете просто сохранить время начала и продолжительность вместо времени начала и окончания.
Сделайте это внутри метода save вашей модели:
def save(self, *args, **kwargs):
if(self.end_date > self.start_date):
super(Foo, self).save(*args, **kwargs)
else:
raise Exception, "end_date should be greater than start_date"