Raj R96
Raj R96

Reputation: 50

Django - Relationships in Models

In Django there are field types called ForeignKey and OneToMany/OneToOne, I was wondering would I use ForeignKey or the relationship type as the field type in this scenario? User to Profile has been identified as OneToOne but I'm unsure about the others.

class Profile(models.Model):
    user = models.OneToOneField(User, on_delete = models.CASCADE)
    fullname = models.CharField(max_length=100)
    dob = models.DateField()
    address = models.TextField()
    city = models.CharField(max_length=100)
    profilephoto = models.ImageField(default='default_profile.jpg', upload_to='reviewApp/static/profile_images')

class Product(models.Model):
    name = models.CharField(max_length=100)
    brand = models.CharField(max_length=100)
    cost = models.DecimalField(max_digits=8, decimal_places=2, default=0.00)
    category = models.CharField(max_length=100)
    releasedate = models.DateField()
    description = models.TextField()
    productphoto = models.ImageField(default='default_product.jpg', upload_to='reviewApp/static/product_images')

class Review(models.Model):
    product = models.ForeignKey(Product)
    profile = models.ForeignKey(Profile)
    author = models.ForeignKey(User, on_delete=models.CASCADE)
    rating = model.PositiveSmallIntegerField(default=1, validators = [MinValueValidator(1), MaxValueValidator(5)])
    reviewtext = models.TextField()
    postdate = models.DateTimeField(auto_now_add=True)
    lastmodified = models.DateTimeField(auto_now=True)

ERD for Project

Upvotes: 0

Views: 664

Answers (1)

Ben Boyer
Ben Boyer

Reputation: 1234

So from what I see here, it seems to be good if the following is what you want:

  • User can have only one profile and one Profile is related to only one user.
  • a Profile can make multiple Review but a Review belongs to only one profile.
  • A Product can have multiple Review but a Review is specific to one Product.

Be carefull to define the on_delete argument for your foreign keys depending of what you want to keep in your database after a delete.

More info from the doc : https://docs.djangoproject.com/fr/2.2/ref/models/fields/#arguments

Upvotes: 3

Related Questions