Skip to main content

Relationships

I started getting bored with looking at student pull requests that hardly ever included more than one model. So I decided to make their lives a little more challenging. I'll admit, it was mostly for my benefit, but hey, it's good for them to experiment with relating models to each other too! So now, they are asked to add at least 2 related models to their apps. A little optional challenge.

In Django, there are 3 different fields you can use to represent relationships between models:

1. ForeignKey

This represents a many-to-one relationship. Like pets to a household. This field requires 2 arguments- the related class(the model it is related to) and the on_delete option. So it looks like this:


class Pet(models.Model):

    owner = models.ForeignKey('Owner', on_delete=models.CASCADE)

class Owner(models.Model):

    [insert whatever fields you choose to include in this class here]


On delete >>> cascade is an example often used online. But there are more options than just cascade. Django documentation says you can  CASCADE/ PROTECT/ RESTRICT/ SET_NULL/ SET_DEFAULT/ SET()/ DO_NOTHING. This site provides a pretty good explanation of what these options mean. You can also look at the official Django Docs . 


2. ManyToManyField

This represents a many-to-many relationship. Like pizza and toppings. It has one required argument- the related class(model). When you run the command 'python manage.py migrate', you'll notice that an intermediary join table is generated by Django to represent this relationship. It is named using the field name and the name of the model.


class Topping(models.Model):

    topping = models.ManyToManyField('Pizza')

class Pizza(models.Model):

    [insert whatever fields you choose to include in this class here]


This field also accepts optional arguments and you can read about them in the official Django Docs. 


3. OneToOneField

This represents a one-to-one relationship. No surprises there. According to the Django docs, you can sort of create this relationship with a ForeignKey as long as you indicate that unique=True. The difference is that the relationship will always return a single object. Whereas when using a ForeignKey, a list will be returned. One argument is required- the related class. You can specify a related_name argument. But if you don't, Django will generate one for you using the lowercase name of the current model.


class Toothbrush(models.Model):

    toothbrush = models.OneToOneField('User')

class User(models.Model):

    [insert whatever fields you choose to include in this class here]


Part of designing your database schema is determining how your models should relate to each other. I'm still trying to learn and better understand this better.

Comments

Popular posts from this blog

Deviants in a normal world

It's definitely been a bit since I've seen this graphy. Anyone who has learnt about standard deviation knows this graph. Standard Deviation Standard deviation shows us how spread out all the values in a set are from the mean. The higher the standard deviation, the more spread out the values are over a wider range and the flatter this curve. In a normal distribution, most values are within 1 standard deviation from the mean(the green part of the graph). Apparently NumPy can calculate standard deviation too! import numpy numSet = [ *lots of numbers* ] numSetStdDev = numpy.std(numSet) Variance The variance also indicates how spread out the values in a set are. It measures the average degree to which each value differs from the mean. variance = standard deviation ^2 import numpy numSet = [ *lots of numbers * ] numSetVar = numpy.var(numSet) Source:  https://www.w3schools.com/python/python_ml_standard_deviation.asp

So long and thanks for all the fish! Part 1 of 2

I have been with the Tech Academy both as a software developer bootcamp student, as well as an employee. After my bootcamp, I was hired first as the live project instructor, and then as Live Project Director. This, I believe, gives me a unique point of view. I have absolutely no regrets and would join the bootcamp again. But there are a number of things I would do differently. What I have learnt as a former student 1. DO NOT WORK PART TIME.   I worked part-time(20-30hrs) during my bootcamp. I was up at 2.30-3.00am every day to work for several hours. I took a short nap, and then I took a 1hr bus ride down to campus. Studied for 7- 9 hours. Took a 1hr bus ride back home. Lather, rinse, repeat. I also had some family obligations. My weekends and half the summer were taken up caring for my young stepdaughter. I was completely exhausted by the end of the bootcamp and I didn't know if I could do more. Learning to program is HARD. You need to be fully focused. I am fortunate because I di...

Certified CSS Surgeon

I've just been certified as a top notch CSS Surgeon 😹😹😹. Codepip has just officially launched and they're offering CSS Surgeon for free until the 1st of September. I've already finished Flexbox Froggy(Free) and Grid Garden(Also free). I really do enjoy the CSS games on this website. It has helped me better understand CSS. There is still so much to learn. I've been trying to create a simple language learning website and it has been a struggle. I'm using the most simple website layout and yet it's just kicking my butt(I'm looking at you Nav bar). I hope to add some Javascript to make it more interactive in the future. At one point I really wanted to throw in the towel because it felt like I would never get this. It's hard not to give up when there are so many hurdles to cross. Can I really be confident at coding after just a 6 month bootcamp?