【问题标题】:How to limit the number of entries in django database ? Using the default database (sqlite3)如何限制 django 数据库中的条目数?使用默认数据库(sqlite3)
【发布时间】:2019-10-24 16:23:00
【问题描述】:

如何指定我的 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 管理面板在数据库中添加两个用户的数据后,如果我尝试存储第三个成员的数据,那么它应该显示超出数据库限制,您无法存储此数据,请先删除以前的数据。 是否可以从 django models.py 中限制条目。

【问题讨论】:

    标签: python django


    【解决方案1】:

    您可以创建一个自定义 ModelAdmin 并将您的逻辑放在那里,因此,如果您为您的 About 模型所在的应用程序编辑您的 admin.py 如下:

    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)
    

    这应该可以解决问题...

    【讨论】:

      【解决方案2】:

      写一个用户定义的异常

      class DbLimitException(BaseException):
            pass
      

      覆盖About类的save方法

      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)
      

      【讨论】:

      • 我收到一个错误,“DbLimitException”未定义
      • 你必须从你定义的文件中导入它是你先定义的吗?
      • 那么它将如何工作?您的错误是直截了当的DbLimitException is not defined。在文件中定义它并导入About模型上方定义相同的文件
      • 由于这个逻辑,我无法修改这 2 个现有用户的数据。
      • 这是因为覆盖了保存功能
      【解决方案3】:

      你可以做的一件事是,

      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"}
      

      模板.html

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

      【讨论】:

      • 我需要管理面板的解决方案
      • 是的,我后来意识到了这一点,但没有考虑修改我的答案,因为@Yugandhar Chaudhari 已经完美地回答了这个问题。
      • 但是由于覆盖了保存功能,我无法修改现有数据
      猜你喜欢
      • 2017-05-21
      • 2013-12-02
      • 1970-01-01
      • 2019-12-12
      • 1970-01-01
      • 2020-08-01
      • 2016-09-05
      • 1970-01-01
      • 2010-12-25
      相关资源
      最近更新 更多