Created
June 3, 2018 14:12
-
-
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.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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