Welcome to the Treehouse Community

Want to collaborate on code errors? Have bugs you need feedback on? Looking for an extra set of eyes on your latest project? Get support with fellow developers, designers, and programmers of all backgrounds and skill levels here with the Treehouse Community! While you're at it, check out some resources Treehouse students have shared here.

Looking to learn something new?

Treehouse offers a seven day free trial for new students. Get access to thousands of hours of content and join thousands of Treehouse students and alumni in the community today.

Start your free trial

Python Build a Social Network with Flask How to Win Friends Related Users

Build A social network with flask

Add a new model named Relationship. It should have a ForeignKeyField, related to User. The field should be named from_user with a related_name of "relationships".

help

models.py
import datetime

from flask.ext.bcrypt import generate_password_hash
from flask.ext.login import UserMixin
from peewee import *

DATABASE = SqliteDatabase(':memory:')


class User(UserMixin, Model):
    email = CharField(unique=True)
    password = CharField(max_length=100)
    join_date = DateTimeField(default=datetime.datetime.now)
    bio = CharField(default='')
    user = ForeignKeyField(
        rel_model=User,
        related_name='post'
    )


    class Relationship(Model):
        from_user = ForeignKeyField(User, related_name='relationships')  
        to_user = ForeignKeyField(User, related_name='related_to')  

    class Meta:
        database = DATABASE


    @classmethod
    def new(cls, email, password):
        cls.create(
            email=email,
            password=generate_password_hash(password)
        )



class LunchOrder(Model):
    order = TextField()
    date = DateField()
    user = ForeignKeyField(User, related_name="orders")


def initialize():
    DATABASE.connect()
    DATABASE.create_tables([User, LunchOrder], safe=True)
    DATABASE.close()

4 Answers

Jeff Muday
MOD
Jeff Muday
Treehouse Moderator 28,716 Points

Tafadzwa,

You aren't too far from a solution here. Good work!

If you take the "Relationship" model and separate it from the "User" model, you will pass the first two parts of the Challenge.

There are two other parts of the Challenge afterward, but this will get you going.

best, Jeff

class User(UserMixin, Model):
    email = CharField(unique=True)
    password = CharField(max_length=100)
    join_date = DateTimeField(default=datetime.datetime.now)
    bio = CharField(default='')
    user = ForeignKeyField(
        rel_model=User,
        related_name='post'
    )

    class Meta:
        database = DATABASE

    @classmethod
    def new(cls, email, password):
        cls.create(
            email=email,
            password=generate_password_hash(password)
        )

class Relationship(Model):
    from_user = ForeignKeyField(User, related_name='relationships')  
    to_user = ForeignKeyField(User, related_name='related_to') 

it keeps saying user not defined do you mind sending the full code

Jeff Muday
MOD
Jeff Muday
Treehouse Moderator 28,716 Points

This is a really good challenge and takes a bit of effort to get all the parts correct. Especially the last part the syntax is slightly tricky because of a Python tuple requirement of a trailing comma for a one-element tuple.

Charles Leifer's documentation on PeeWee is admirable. I had the pleasure of meeting Charles at a conference a number of years ago-- very intelligent, very humble fellow. I am glad Kenneth Love selected teaching PeeWee over SQLAlchemy, it's flexible and simpler to learn. But when you get out there in the world of developers, you should be aware that SQLAlchemy has a larger community.

http://docs.peewee-orm.com/en/latest/peewee/models.html#indexes-and-constraints

Spoiler alert on code below--

# Challenge part 1 code below
class Relationship(Model):
    from_user = ForeignKeyField(User, related_name='relationships')
    # Challenge part 2 adds the code below
    to_user = ForeignKeyField(User, related_name='related_to')
    # Challenge part 3 adds the code below
    created_at = DateTimeField(default=datetime.datetime.now)

    # Challenge part 4 adds the code below
    class Meta:
        database = DATABASE
        # the hardest part is the indexes as this is slightly less common
        # reference documentation: 
        # http://docs.peewee-orm.com/en/latest/peewee/models.html#indexes-and-constraints
        indexes = (
            (('from_user','to_user'), True),
        )

import datetime

from flask.ext.bcrypt import generate_password_hash from flask.ext.login import UserMixin from peewee import *

DATABASE = SqliteDatabase(':memory:')

class User(UserMixin, Model): email = CharField(unique=True) password = CharField(max_length=100) join_date = DateTimeField(default=datetime.datetime.now) bio = CharField(default='')

class Meta:
    database = DATABASE

class Relationship(Model): from_user = ForeignKeyField(User, related_name='relationships') to_user = ForeignKeyField(User, related_name='related_to') created_at = DateTimeField(default=datetime.datetime.now)

class Meta:
    database = DATABASE
    indexes = (
        (('from_user','to_user'), True),
    ) 

@classmethod
def new(cls, email, password):
    cls.create(
        email=email,
        password=generate_password_hash(password)
    )

class LunchOrder(Model): order = TextField() date = DateField() user = ForeignKeyField(User, related_name="orders")

def initialize(): DATABASE.connect() DATABASE.create_tables([User, LunchOrder], safe=True) DATABASE.close()

i dont knw where im goin wrong this challenge got me stuck