Vishal
Vishal

Reputation: 33

How to limit the number of entries in django database ? Using the default database (sqlite3)

How can i specify number of entries in my django database (sqlite3). For example my model is:

from django.db import models

class About(models.Model):
    firstname = models.CharField(max_length=500)
    lastname = models.CharField(max_length=500, blank=True)
    address = models.TextField()
    details = models.TextField()

    class Meta:
        verbose_name_plural = 'About'

    def __str__(self):
        return self.firstname

Now i want to store data of only 2 members in my database. And after adding the data of both users in database from django admin panel, if i try to store data of 3rd member than it should show that database limit is crossed you can't store this data, delete previous data first. Is it possible to limit entries form django models.py .

Upvotes: 1

Views: 1422

Answers (3)

Jon Clements
Jon Clements

Reputation: 142176

You can create a custom ModelAdmin and put your logic there, so if you edit your admin.py for the app that your About model is in to be something like:

from django.contrib import admin
from django.http import HttpResponseRedirect
from django.shortcuts import reverse
from django.contrib import messages

from .models import About

class AboutAdmin(admin.ModelAdmin):
    def add_view(self, request, form_url='', extra_context=None):
        if self.model.objects.count() >= 2:
            self.message_user(request, 'Only two entries can exist at once - please remove others first', messages.ERROR)
            return HttpResponseRedirect(reverse(f'admin:{self.model._meta.app_label}_about_changelist'))
        return super().add_view(request, form_url, extra_context)

admin.site.register(About, AboutAdmin)

That should do the trick...

Upvotes: 1

Yugandhar Chaudhari
Yugandhar Chaudhari

Reputation: 3964

Write a user defined exception

class DbLimitException(BaseException):
      pass

Override the save method of class About

def save(self,*args,**kwargs):
    total_records = About.objects.count()
    if total_records >= 2:
       raise DbLimitException({"message": "Db limit reached please delete to add more data"})
    else:
       super().save(*args,**kwargs)

Upvotes: 2

Sahil
Sahil

Reputation: 1413

One thing you can do is this,

view.py

about_count = About.objects.count()
if about_count == 2:
    return render(request, template_name="template.html", context={"error": "You cannot add more entries to the table, you need to delete the previous ones"}

template.html

{% if error %}
   {{error}}
{% endif %}

Upvotes: 0

Related Questions