Skip to content

Instantly share code, notes, and snippets.

@tinvaan
Created June 3, 2018 14:12
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save tinvaan/959a72e726a483423fb0b56fef89375c to your computer and use it in GitHub Desktop.
Save tinvaan/959a72e726a483423fb0b56fef89375c to your computer and use it in GitHub Desktop.
Code snippet to demonstrate how a Django model can be made immutable on certain condition. Hint : Override the save() method for the model in question.
from django.db import models
from django.utils import timezone
class Bank(models.Model):
bank_ifsc = models.CharField(max_length=200, blank=False, primary_key=True)
bank_name = models.CharField(max_length=200, blank=False)
bank_addr = models.CharField(max_length=400, blank=True)
def __str__(self):
return self.bank_name
def save(self, *args, **kwargs):
if len(Bank.objects.filter(bank_name=self.bank_name)) >= 2:
print("Branch limit for bank ", self.bank_name, " exceeded")
else:
super().save(args, kwargs)
return
class Banker(models.Model):
banker_uid = models.CharField(max_length=200, blank=False, primary_key=True)
banker_name = models.CharField(max_length=200, blank=False)
banker_age = models.IntegerField(blank=True, default=18)
banker_acct = models.ForeignKey(Bank, on_delete=models.CASCADE)
def __str__(self):
return "%s %s" % (self.banker_uid, self.banker_name)
class Transactions(models.Model):
transaction_datetime = models.DateTimeField(default=timezone.now)
transaction_bank = models.ForeignKey(Bank, on_delete=models.CASCADE)
transaction_banker = models.ForeignKey(Banker, on_delete=models.CASCADE)
def __str__(self):
return "%s : (%s, %s)" % (self.transaction_datetime,
self.transaction_banker,
self.transaction_bank)
def save(self, *args, **kwargs):
try:
Transactions.objects.get(transaction_datetime=self.transaction_datetime,
transaction_bank=self.transaction_bank,
transaction_banker=self.transaction_banker)
print("Existing record. Not action intiated")
except Transactions.DoesNotExist:
print("New record. Saving to the database")
super().save(args, kwargs)
return
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment