Back

Explore Courses Blog Tutorials Interview Questions
0 votes
2 views
in Web Technology by (19.9k points)

I have models in Django set up as below.

class Pupil(models.Model):

    forename = models.CharField(max_length=30)

    surname = models.CharField(max_length=30)

    dateofbirth = models.DateField()

    year = models.IntegerField()

    class_group = models.CharField(max_length=30)

    email = models.EmailField(blank=True)

    assignments = models.ManyToManyField('Assignment', verbose_name='related assignments')

    def __unicode__(self):

        return u'%s %s' % (self.forename, self.surname)

class Subject(models.Model):

    name = models.CharField(max_length=30)

    level = models.CharField(max_length=30)

    teachers = models.ManyToManyField('Teacher', verbose_name='related teachers')

    def __unicode__(self):

        return self.name

class Teacher(models.Model):

    forename = models.CharField(max_length=30)

    surname = models.CharField(max_length=30)

    email = models.EmailField(blank=True)

    def __unicode__(self):

        return u'%s %s' % (self.forename, self.surname)

class Assignment(models.Model):

    assignment_name = models.CharField(max_length=30)

    date_assigned = models.DateField()

    date_submitted = models.DateField()

    def __unicode__(self):

        return self.assignment_name

When I attempt to add a pupil and attach an assignment to the pupil in the admin, I get a database error -

no such table: homework_pupil_assignments

After reading this I realised this could be due to django not updating changes to my models as when I do manage.py sqlall homework

I see the following:

BEGIN;

CREATE TABLE "homework_pupil_assignments" (

    "id" integer NOT NULL PRIMARY KEY,

    "pupil_id" integer NOT NULL,

    "assignment_id" integer NOT NULL,

    UNIQUE ("pupil_id", "assignment_id")

)

;

CREATE TABLE "homework_pupil" (

    "id" integer NOT NULL PRIMARY KEY,

    "forename" varchar(30) NOT NULL,

    "surname" varchar(30) NOT NULL,

    "dateofbirth" date NOT NULL,

    "year" integer NOT NULL,

    "class_group" varchar(30) NOT NULL,

    "email" varchar(75) NOT NULL

)

;

CREATE TABLE "homework_subject_teachers" (

    "id" integer NOT NULL PRIMARY KEY,

    "subject_id" integer NOT NULL,

    "teacher_id" integer NOT NULL,

    UNIQUE ("subject_id", "teacher_id")

)

;

CREATE TABLE "homework_subject" (

    "id" integer NOT NULL PRIMARY KEY,

    "name" varchar(30) NOT NULL,

    "level" varchar(30) NOT NULL

)

;

CREATE TABLE "homework_teacher" (

    "id" integer NOT NULL PRIMARY KEY,

    "forename" varchar(30) NOT NULL,

    "surname" varchar(30) NOT NULL,

    "email" varchar(75) NOT NULL

)

;

CREATE TABLE "homework_assignment" (

    "id" integer NOT NULL PRIMARY KEY,

    "assignment_name" varchar(30) NOT NULL,

    "date_assigned" date NOT NULL,

    "date_submitted" date NOT NULL

)

;

COMMIT;

I then installed South, following the directions to get up and running with an existing app, in the hope of successfully syncing these tables. No joy.

Can anyone suggest how I can get the database (sqlite3) to reflect the models or point out what I'm doing wrong?

1 Answer

0 votes
by (25.1k points)

You can try this!

python manage.py makemigrations

python manage.py migrate --run-syncdb

Browse Categories

...