Уведомления

Группа в Telegram: @pythonsu

#1 Май 22, 2013 12:39:52

terrrible
Зарегистрирован: 2013-02-26
Сообщения: 22
Репутация: +  0  -
Профиль   Отправить e-mail  

переопределение метода save()

models.py

class Course(models.Model):
	title = models.CharField(max_length=100)
	department = models.ForeignKey(Department, blank=True)
	start_date = models.DateField(blank=True, null=True)
	end_date = models.DateField(blank=True, null=True)
class Course_event(models.Model):
	title = models.ForeignKey(Course)
	date_time = models.DateTimeField(blank=True, null=True)
	def save(self, *args, **kwargs):
		course = self.title
		if course.start_date and course.end_date:
			#some code
			course.save()
			super(Course_event, self).save(*args, **kwargs)

Подскажите, пожалуйста, почему при переопределении сохранения, когда добавляю запись Course_event выдаёт:
“<Course_event: Math>” needs to have a value for field “course_event” before this many-to-many relationship can be used.
Добавляю в админке.
Если поля start_date и end_date не null, то всё работает.
Спасибо.

Отредактировано terrrible (Май 22, 2013 12:40:35)

Офлайн

#2 Май 22, 2013 15:11:26

nnmware
Зарегистрирован: 2012-07-21
Сообщения: 133
Репутация: +  13  -
Профиль   Отправить e-mail  

переопределение метода save()

Дык у Вас же и стоит
if course.start_date and course.end_date:
собственно если нет этих значений(или оно null, то бишь None)- оно не сохраняется.
На что там админка ориентируется в этом плане точно не скажу, но похоже сигнал post_save не вызывается.

Офлайн

#3 Май 22, 2013 15:16:14

terrrible
Зарегистрирован: 2013-02-26
Сообщения: 22
Репутация: +  0  -
Профиль   Отправить e-mail  

переопределение метода save()

Не-не, что не сохраняется это нормально. Но оно вообще вылетает с ошибкой.
Можно в переопределённом методе что угодно написать, даже не трогать эти if course.start_date and course.end_date: - всё равно будет ругаться.
Факт, что если есть переопределение save, то вылазит эта ошибка.

Офлайн

#4 Май 22, 2013 15:25:40

nnmware
Зарегистрирован: 2012-07-21
Сообщения: 133
Репутация: +  13  -
Профиль   Отправить e-mail  

переопределение метода save()

Ну у Вас
super(Course_event, self).save(*args, **kwargs)
вызывается только если даты есть.
а дальше в переопределении вызывается это?
В конце метода save по-любому надо super(Course_event, self).save(*args, **kwargs)

class Course_event(models.Model):
	title = models.ForeignKey(Course)
	date_time = models.DateTimeField(blank=True, null=True)
	def save(self, *args, **kwargs):
		course = self.title
		if course.start_date and course.end_date:
			#some code
			course.save()
		super(Course_event, self).save(*args, **kwargs)
Вот так пашет?

Отредактировано nnmware (Май 22, 2013 15:26:54)

Офлайн

#5 Май 22, 2013 15:30:17

terrrible
Зарегистрирован: 2013-02-26
Сообщения: 22
Репутация: +  0  -
Профиль   Отправить e-mail  

переопределение метода save()

super(Course_event, self).save(*args, **kwargs) должен быть в любом случае запущен в конце? Т.е. нельзя так как у меня в примере, что он запускается, если выполнено условие?
А как тогда нужно правильно сохранять запись? Если мне нужно, чтобы поля start_date и end_date были null.
P.S. если переопределяю метод save(), но делаю его просто пустым, ничего там не пишу - та же ошибка. Запутался уже куда копать)

Отредактировано terrrible (Май 22, 2013 15:34:40)

Офлайн

#6 Май 22, 2013 15:39:32

terrrible
Зарегистрирован: 2013-02-26
Сообщения: 22
Репутация: +  0  -
Профиль   Отправить e-mail  

переопределение метода save()

Вот так пашет?

Эммм, кажется да
Что-то затупил я, спасибо!)

Офлайн

#7 Май 22, 2013 19:04:36

nnmware
Зарегистрирован: 2012-07-21
Сообщения: 133
Репутация: +  13  -
Профиль   Отправить e-mail  

переопределение метода save()

Ничего страшного.
Просто в конце метода save по любому надобно вызвать метод save родительского класса.

Офлайн

#8 Май 23, 2013 07:13:08

ilnur
От: Казань
Зарегистрирован: 2009-01-06
Сообщения: 524
Репутация: +  22  -
Профиль   Отправить e-mail  

переопределение метода save()

по-моему

course.save()
тут лишнее.

вы перекрываете стандартный save химимчите с полями. А потом вызываете родительский save. Который все и сохранит

Офлайн

#9 Май 23, 2013 12:41:16

terrrible
Зарегистрирован: 2013-02-26
Сообщения: 22
Репутация: +  0  -
Профиль   Отправить e-mail  

переопределение метода save()

ilnur
по-моему course.save()
тут лишнее.вы перекрываете стандартный save химимчите с полями. А потом вызываете родительский save. Который все и сохранит

Так я же химичу с полями записи из таблицы Course, Если убрать course.save(), то сохранится только запись в Course_event, а вся нужная химия для Course нет.

Офлайн

#10 Май 23, 2013 13:09:17

ilnur
От: Казань
Зарегистрирован: 2009-01-06
Сообщения: 524
Репутация: +  22  -
Профиль   Отправить e-mail  

переопределение метода save()

да точно. не заметил что модели разные

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version