Best Practices Model Design

30 views
Skip to first unread message

G Z

unread,
Jan 30, 2015, 3:34:21 PM1/30/15
to django...@googlegroups.com

Hello, I'm in the design stages of a site that I'm building. It is going to be a basic social media site for a game I'm designing in unity. I'm not entirely sure how to do some of the things I want to in Django. Thus, my first question is generally best practices question as well as a how do I do this question.


Qustion #1: How do I set up my models field so that when a user uploads an image to a filefield it attaches the users name to the file that is being uploaded? Should I do this in the view or in the database?


Question #2: Examine my model design and tell me what I can do better, if I'm missing anything etc. I'm new to django so go easy. I didn't do the def and functions and class stuff just the over all structure. If it would be better if I posted that let me know and I will.


Question#3 How do I make the page when a user logs in resolve to his username, and how do I use the username as the url so when you click on a list of friends it uses that friends username as the url for their profile and resolves to thier page, a quick overview on the best way to do this would be just fine. Just point me and kinda explain the theory and I'm sure I can figure out the rest. 


Please just help me think of things I need to worry about design with django im just starting and I dont have a good base to go on.

class User(models.Model):

 


id
= models.AutoField(primary_key=True)

username
= models.CharField(max_length=4000)

password
= models.CharField(max_length=4000)

email
= models.CharField(max_length=4000)

phone
= models.CharField(max_length=4000)

profile_image
= models.FileField()

about  
= models.CharField(max_length=4000)

hometown  
= models.CharField(max_length=4000)

job  
= models.CharField(max_length=4000)

score  
= models.CharField(max_length=4000)

hobbies  
= models.CharField(max_length=4000)

datetime  
= models.DateField()

     
class Meta:

        managed
=True


 

class Message(models.Model):


id
= models.AutoField(primary_key=True)

userid
= models.ForeignKey(User)

friendid
= models.ForeignKey(User)

msg  
= models.CharField(max_length=4000)

subject
= models.CharField(max_length=4000)

datetime  
= models.DateField()

     
class Meta:

        managed
=True

class MsgQueue(models.Model):


id
= models.AutoField(primary_key=True)

userid
= models.ForeignKey(User)

friend = models.CharField(max_length=4000)

msg  
= models.CharField(max_length=4000)

type  
= models.CharField(max_length=4000)

dest  
= models.CharField(max_length=4000)

datetime  
= models.DateField()

     
class Meta:

        managed
=True

class UserCode(models.Model):


id
= models.AutoField(primary_key=True)

userid
= models.ForeignKey(User)

code  
= models.CharField(max_length=4000)

datetime  
= models.DateField()

     
class Meta:

        managed
=True

class Album(models.Model):


id
= models.AutoField(primary_key=True)

userid
= models.ForeignKey(User)

name  
= models.CharField(max_length=4000)

imageid
= models.ForeignKey(Image)

datetime  
= models.DateField()

     
class Meta:

        managed
=True

class Image(models.Model):


id
= models.AutoField(primary_key=True)

userid
= models.ForeignKey(User)

image
= models.FileField()

imgdesc  
= models.CharField(max_length=4000)

datetime  
= models.DateField()

     
class Meta:

        managed
=True

 

class ImageComment(models.Model):


id
= models.AutoField(primary_key=True)

userid
= models.ForeignKey(User)

imageid
= models.ForeignKey(Image)

comment
= models.CharField(max_length=4000)

datetime
= models.DateField()

     
class Meta:

        managed
=True


 

class ImageLike(models.Model):


id
= models.AutoField(primary_key=True)

imageid
= models.ForeignKey(Image)

userid
= models.ForeignKey(User)

datetime
= models.DateField()

     
class Meta:

        managed
=True


 

class Post(models.Model):


id
= models.AutoField(primary_key=True)

userid
= models.ForeignKey(User)

message
= models.CharField(max_length=4000)

image
= models.FileField()

embed_link  
= models.CharField(max_length=4000)

liked_count  
= models.CharField(max_length=4000)

datetime
= models.DateField()

     
class Meta:

        managed
=True


 

class PostComment(models.Model):


id
= models.AutoField(primary_key=True)

userid
= models.ForeignKey(User)

postid
= models.ForeignKey(Post)

comment
= models.CharField(max_length=4000)

datetime
= models.DateField()

     
class Meta:

        managed
=True


 

class PostLike(models.Model):


id
= models.AutoField(primary_key=True)

postid
= models.ForeignKey(Post)

userid
= models.ForeignKey(User)

datetime
= models.DateField()

     
class Meta:

        managed
=True


 

class UserFriend(models.Model):


id
= models.AutoField(primary_key=True)

userid
= models.ForeignKey(User)

friendid
= models.ForeignKey(User)

datetime
= models.DateField()

     
class Meta:

        managed
=True


 


 

class UserEnviroment(models.Model):


id
= models.AutoField(primary_key=True)

userid
= models.ForeignKey(User)

elementid
= models.ForeignKey(User)

datetime
= models.DateField()

     
class Meta:

        managed
=True


 

class EnvElement(models.Model):


id = models.AutoField(primary_key=True)

elementname
= models.CharField(max_length=4000)

elementfile
= models.FileField()

elementcost
=  models.CharField(max_length=4000)

elementmaturetime
= models.CharField(max_length=4000)

elementposition
= models.CharField(max_length=4000)

datetime
= models.DateField()

     
class Meta:

        managed
=True


Tobias Dacoir

unread,
Jan 30, 2015, 4:59:55 PM1/30/15
to django...@googlegroups.com
Hi,

I'm quite new to Django myself. I doubt anyone is going through your whole Models File. You should have at least copy & pasted it from some kind of IDE to preserve the indention level.

As for your other questions about the url to user-/profilename, have you looked at the tutorial: https://docs.djangoproject.com/en/1.7/intro/tutorial03/
There the urls.py is explained. In their example question_id is used, but I bet you could use something else as well. Or go with the user_id (that's what I did, of course doesn't look so pretty).

And about the file upload - I didn't rename the files yet, but it's good practice, so I looked up the documentation and apparently you can overwrite the filename. I will have to try this out too later: https://docs.djangoproject.com/en/1.7/ref/models/fields/#django.db.models.FileField
Reply all
Reply to author
Forward
0 new messages