TIL
Web Dev Bootcamp TIL Day-46(Django Reverse Lookup)
frannyk
2022. 6. 17. 19:27
- The dir() method returns the list of valid attributes of the passed object.
number = [12]
# returns valid attributes of the number list
print(dir(number))
# Output: ['__add__', '__class__', '__contains__', '__delattr__', '__delitem__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__gt__', '__hash__', '__iadd__', '__imul__', '__init__', '__init_subclass__', '__iter__', '__le__', '__len__', '__lt__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__reversed__', '__rmul__', '__setattr__', '__setitem__', '__sizeof__', '__str__', '__subclasshook__', 'append', 'clear', 'copy', 'count', 'extend', 'index', 'insert', 'pop', 'remove', 'reverse', 'sort']
- attributes are created when we create new attributes
- objects that are in a many-to-many relationship contain attributes that can return a queryset of related object
# models.py
class User(AbstractBaseUser):
...
class Hobby(models.Model):
...
class UserProfile(models.Model):
user = models.OneToOneField(User)
hobby = models.ManyToManyField(Hobby, related_name="userprofile")
...
# views.py
user = User.objects.get(id=obj_id)
hobby = Hobby.objects.get(id=obj_id)
print(dir(user))
print(dir(hobby))
# result dir(user) print
"""
[..., userprofile, ...]
"""
# result dir(hobby) print
"""
[..., userprofile_set, ...]
"""
# notice that user and UserProfile have a one-to-one relationship
# ----> user.userprofile
# ----> Object is returned
# on the other hand, hobby and UserProfile are in a many-to-many relationship
# ----> hobby.userprofile_set
# ----> Queryset is returned ... we can also use hobby.userprofile.all()
# there can be multiple ForeignKeys for a given table, so a queryset is called when FK is used
django.db.utils.IntegrityError: NOT NULL
--> this is a very common error for beginners. It means that you have a field that is null=False (aka the default) and you're trying to create that model WITHOUT that field having any data.