I have a database, which among others has the following tables:

CREATE TABLE users (
  userId BIGINT PRIMARY KEY
);

CREATE TABLE movies (
  movieId BIGINT PRIMARY KEY,
  title varchar(255) NOT NULL
);

CREATE TABLE ratings (
  userId BIGINT NOT NULL REFERENCES users(userId),
  movieId BIGINT NOT NULL REFERENCES movies(movieId),
  rating SMALLINT NOT NULL,
  timestamp varchar(150) NOT NULL,
  CONSTRAINT unique_userid_movieid UNIQUE(userId, movieId)
);

As you can see the 'rating' table has no separate primary key field.

Here are the models created by Django with some my corrections:

class Users(models.Model):
    userid = models.BigIntegerField(primary_key=True)

    def __unicode__(self):
        return u"User %d" % self.userid

    class Meta:
        db_table = u'users'

class Movies(models.Model):
    movieid = models.BigIntegerField(primary_key=True)
    title = models.CharField(max_length=255)
    users = models.ManyToManyField(Users, through='Ratings',
related_name="rated_movies")

    def __unicode__(self):
        return self.title

    class Meta:
        db_table = u'movies'

class Ratings(models.Model):
    user = models.ForeignKey(Users, db_column='userid')
    movie = models.ForeignKey(Movies, db_column='movieid')
    rating = models.SmallIntegerField()
    timestamp = models.BigIntegerField()

    def __unicode__(self):
        return u"%d" % self.rating

    class Meta:
        db_table = u'ratings'
        unique_together = (("user", "movie"),)




So having these models i can do this:

In [1]: from django_orm.movielens.models import *
In [2]: u = Users.objects.get(pk=1)
In [3]: u.rated_movies.all()
Out[3]: [<Movies: Boomerang (1992)>,..]

or this:

In [4]: m = Movies.objects.get(pk=1)
In [5]: m.users.all().count()
Out[5]: 2264

But i can't get the "ratings" objects because trying this:

Ratings.objects.filter(user=1)

or this:

u.ratings_set.all()

causes the following error

DatabaseError: column ratings.id does not exist
LINE 1: SELECT "ratings"."id", "ratings"."userid",
"ratings"."moviei...

Is there a way to tell Django, that 'Ratings' models does not have a
separate primary key? Or my only option is to add the column to the
'ratings' table?

-- 
You received this message because you are subscribed to the Google Groups 
"Django users" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/django-users?hl=en.

Reply via email to