Как ограничить количество записей в базе данных django? Использование базы данных по умолчанию (sqlite3) - PullRequest
0 голосов
/ 19 октября 2019

Как я могу указать количество записей в моей базе данных django (sqlite3). Например, моя модель:

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

Теперь я хочу хранить данные только 2 членов в моей базе данных. И после добавления данных обоих пользователей в базу данных из админ-панели django, если я попытаюсь сохранить данные 3-го члена, чем это должно показать, что предел базы данных превышен, вы не можете сохранить эти данные, сначала удалите предыдущие данные. Можно ли ограничить записи формы django models.py.

Ответы [ 3 ]

1 голос
/ 19 октября 2019

Вы можете создать пользовательский ModelAdmin и поместить туда свою логику, поэтому, если вы отредактируете свой admin.py для приложения, в котором ваша модель About будет выглядеть примерно так:

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)

Это должно сработать ...

1 голос
/ 19 октября 2019

Напишите пользовательское исключение

class DbLimitException(BaseException):
      pass

Переопределите метод save класса 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)
0 голосов
/ 19 октября 2019

Одна вещь, которую вы можете сделать, это,

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 %}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...