Найти - Пользователи
Полная версия: переопределение метода save()
Начало » Django » переопределение метода save()
1
terrrible
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, то всё работает.
Спасибо.
nnmware
Дык у Вас же и стоит
if course.start_date and course.end_date:
собственно если нет этих значений(или оно null, то бишь None)- оно не сохраняется.
На что там админка ориентируется в этом плане точно не скажу, но похоже сигнал post_save не вызывается.
terrrible
Не-не, что не сохраняется это нормально. Но оно вообще вылетает с ошибкой.
Можно в переопределённом методе что угодно написать, даже не трогать эти if course.start_date and course.end_date: - всё равно будет ругаться.
Факт, что если есть переопределение save, то вылазит эта ошибка.
nnmware
Ну у Вас
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)
Вот так пашет?
terrrible
super(Course_event, self).save(*args, **kwargs) должен быть в любом случае запущен в конце? Т.е. нельзя так как у меня в примере, что он запускается, если выполнено условие?
А как тогда нужно правильно сохранять запись? Если мне нужно, чтобы поля start_date и end_date были null.
P.S. если переопределяю метод save(), но делаю его просто пустым, ничего там не пишу - та же ошибка. Запутался уже куда копать)
terrrible
Вот так пашет?

Эммм, кажется да
Что-то затупил я, спасибо!)
nnmware
Ничего страшного.
Просто в конце метода save по любому надобно вызвать метод save родительского класса.
ilnur
по-моему
course.save()
тут лишнее.

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

Так я же химичу с полями записи из таблицы Course, Если убрать course.save(), то сохранится только запись в Course_event, а вся нужная химия для Course нет.
ilnur
да точно. не заметил что модели разные
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB