Skip to content

Instantly share code, notes, and snippets.

@anderoonies
Created August 10, 2015 17:01
Show Gist options
  • Save anderoonies/79e9cd510baca04236c1 to your computer and use it in GitHub Desktop.
Save anderoonies/79e9cd510baca04236c1 to your computer and use it in GitHub Desktop.
class CourseStudentsJoin(models.Model):
"""Creates a mock of the previous many to many join."""
class Meta:
db_table = u'course_course_students'
course = models.ForeignKey(Course)
student = models.ForeignKey(User)
class Migration(SchemaMigration):
def forwards(self, orm):
# Adding model 'CourseMembership'
db.create_table(u'course_coursemembership', (
(u'id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
('course', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['course.Course'])),
('student', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['auth.User'])),
))
db.send_create_signal(u'course', ['CourseMembership'])
# Adding unique constraint on 'CourseMembership', fields ['course', 'student']
db.create_unique(u'course_coursemembership', ['course_id', 'student_id'])
# Removing M2M table for field students on 'Course'
db.delete_table(db.shorten_name(u'course_course_students'))
# CUSTOM CODE
# this is needed in order to convert all existing joins to new joins using the
# CourseMembership model.
CourseMembership.objects.bulk_create([
CourseMembership(
student=c.student,
course=c.course
)
for c in CourseStudentsJoin.objects.all()
])
def backwards(self, orm):
# Removing unique constraint on 'CourseMembership', fields ['course', 'student']
db.delete_unique(u'course_coursemembership', ['course_id', 'student_id'])
# Deleting model 'CourseMembership'
db.delete_table(u'course_coursemembership')
# Adding M2M table for field students on 'Course'
m2m_table_name = db.shorten_name(u'course_course_students')
db.create_table(m2m_table_name, (
('id', models.AutoField(verbose_name='ID', primary_key=True, auto_created=True)),
('course', models.ForeignKey(orm[u'course.course'], null=False)),
('user', models.ForeignKey(orm[u'auth.user'], null=False))
))
db.create_unique(m2m_table_name, ['course_id', 'user_id'])
# CUSTOM CODE
# convert all the new CourseMembership objects back to the previous join.
?
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment