Follow these steps to safely remove a model and its migrations:
1. Open Model and Remove the Code
- Open
models.pyof the corresponding app. - Delete the class definition of the model you want to remove.
2. Create a New Migration
python manage.py makemigrations
3. Apply the Migration
python manage.py migrate
CRUD Operations in Django
Create
User.objects.create(username="john", email="john@example.com")
Read
users = User.objects.all()
Update
user = User.objects.get(id=1) user.email = "newemail@example.com" user.save()
Delete
User.objects.get(id=1).delete()
Bulk Delete
User.objects.filter(age__lt=18).delete()
Using Django Query Filters
AND Condition
# WHERE age > 18 AND city = 'Delhi' User.objects.filter(age__gt=18, city='Delhi')
OR Condition
from django.db.models import Q # WHERE age > 18 OR city = 'Delhi' User.objects.filter(Q(age__gt=18) | Q(city='Delhi'))
NOT Condition
# WHERE NOT city = 'Delhi' User.objects.exclude(city='Delhi') # OR using Q object User.objects.filter(~Q(city='Delhi'))
Filter (WHERE Clauses)
# WHERE username = 'john' User.objects.filter(username='john') # WHERE age > 18 User.objects.filter(age__gt=18) # WHERE age >= 18 User.objects.filter(age__gte=18) # WHERE age < 18 User.objects.filter(age__lt=18) # WHERE age <= 18 User.objects.filter(age__lte=18) # WHERE age != 18 User.objects.exclude(age=18) # WHERE name LIKE '%john%' (case-insensitive) User.objects.filter(name__icontains='john') # WHERE name LIKE 'John%' (starts with) User.objects.filter(name__istartswith='John') # WHERE name LIKE '%John' (ends with) User.objects.filter(name__iendswith='John')
Django Model Relationships
class Vendor(models.Model):
name = models.CharField(max_length=100)
class Brand(models.Model):
name = models.CharField(max_length=100)
class Product(models.Model):
name = models.CharField(max_length=100)
price = models.DecimalField(max_digits=10, decimal_places=2)
category = models.ForeignKey(Category, on_delete=models.CASCADE, related_name='products')
brand = models.ForeignKey(Brand, on_delete=models.SET_NULL, null=True)
vendor = models.ForeignKey(Vendor, on_delete=models.SET_NULL, null=True)
tags = models.ManyToManyField(Tag)
Using PROTECT to Prevent Deletion
category = models.ForeignKey(Category, on_delete=models.PROTECT, related_name='products') brand = models.ForeignKey(Brand, on_delete=models.PROTECT, null=True) vendor = models.ForeignKey(Vendor, on_delete=models.PROTECT, null=True)
Note:
If you do not pass the related_name parameter, Django will use the default reverse relation name in the format: modelname_set. For example, brand.product_set.all().