在数据库 django 中用特殊字符定义特定数字的最佳方法是啥

Posted

技术标签:

【中文标题】在数据库 django 中用特殊字符定义特定数字的最佳方法是啥【英文标题】:What's the best way to define a particular number with special characters in a database django在数据库 django 中用特殊字符定义特定数字的最佳方法是什么 【发布时间】:2022-01-16 12:35:24 【问题描述】:

我对一个 Django 模型字段有特定要求,本质上我想创建这种类型的系列:

0025-0007

基本上是 4 个整数字段,一个字符,然后是 4 个整数字段,我不需要随着数字的变化而自动递增,Django 中是否已经有任何可用的东西可以处理这些字段,最好是自动验证?

@login_required
def close_lead(request):
    if request.method == 'POST':

        deal_form = NewDealForm(request.POST)

        if deal_form.is_valid():
            deal_form.save()
            id = request.GET.get('project_id', '')
            obj = Leads.objects.get(project_id=id)
            obj.status = "Closed"
            obj.save(update_fields=['status'])
            ## Changing the Forecast Table Entry
            forecast = LeadEntry.objects.filter(lead_id=id)
            for i in forecast:
                m = i
                m.stage = "Deal"
                m.save(update_fields=['stage'])
            messages.success(request, 'You have successfully updated the status from open to Close')
            return HttpResponseRedirect(reverse('dashboard'))

        else:
            messages.error(request, 'Error updating your Form')

    id = request.GET.get('project_id', '')
    keys = Leads.objects.select_related().get(project_id=id)
    form_dict = 'project_id': keys.project_id,
                     'agent': keys.agent,
                     'client': keys.point_of_contact,
                     'company': keys.company,
                     'service': keys.services,
                     'licenses': keys.expected_licenses,
                     'country_d': keys.country
                     

    form = NewDealForm(initial=form_dict)

    return render(request,
                  "account/close_lead.html",
                  'form': form)

## HTML 
% extends "base.html" %
% load crispy_forms_tags %
% load static %
% block title %Close Lead% endblock %
% block content %


  <h1>Close a Lead</h1>
<div class="Myform">
  <form method="post" id="close-lead">
      % csrf_token %
      <div class="row">
           <div class="col-sm-6">
            <div class="form-row">
              <div class="form-group col-md-6">
                   form.project_id|as_crispy_field 
                   form.agent|as_crispy_field 
                   form.sales_order|as_crispy_field 
              </div>
            </div>

            <div class="form-row">
              <div class="form-group col-md-6">
                   form.company|as_crispy_field 
                   form.country_d|as_crispy_field 
              </div>
              <div class="form-group col-md-6">
                   form.client|as_crispy_field 

              </div>
            </div>
            <div class="form-row">
              <div class="form-group col-md-6">
                   form.service|as_crispy_field 
                   form.revenue|as_crispy_field 
                   form.comments|as_crispy_field 
              </div>
              <div class="form-group col-md-6">
                   form.licenses|as_crispy_field 

              </div>
            </div>


           </div>
      </div>
      <input type="submit" value="Create Deal">
  </form>



% endblock %



【问题讨论】:

【参考方案1】:

您可以定义一个验证器并使用CharFieldRegexValidator [Django-doc]:

from django.db import models
from django.core.validators import RegexValidator

class MyModel(models.Model):
    my_field = models.CharField(
        max_length=9,
        validators=[RegexValidator(r'\d4.\d4', 'The value should be four digits, a character and four digits')]
    )

如果四位数字之间的分隔符始终是连字符,则改用r'\d4-\d4'

【讨论】:

Willem,快速提问,验证器似乎不起作用,如果我输入任何其他值,我实际上得到一个错误:UnboundLocalError: local variable 'form' referenced before assignment,对我来说似乎就像我的观点中的 form.valid 不接受该值,但我在 HTML 页面中得到完整的错误 @FranciscoColina:这意味着你使用form变量,在你赋值之前,例如在form = SomeForm()之前,你使用form.is_valid()。跨度> 我稍微改变了逻辑,现在我得到了'错误更新你的表单'),这意味着表单验证正在工作,但我没有看到这条消息:'值应该是四位数字,一个字符和四位数字' @FranciscoColina:你在哪里看到这条消息?你如何渲染表格?你能用视图和模板编辑问题吗? @FranciscoColina:如果表单无效,您应该创建新表单。如果方法是 GET,您只应该创建一个新表单。因此,视图函数尾部的逻辑需要正确缩进。

以上是关于在数据库 django 中用特殊字符定义特定数字的最佳方法是啥的主要内容,如果未能解决你的问题,请参考以下文章

在python中用熊猫反转特殊字符

如何在python中用数字、字母和空格分割字符串?

如何用regexp_replace在mysql中用特定字符替换多个字符?

在Django中用数据库值填充下拉列表后如何给它一个特定的值?

Django请求与响应

正则表达式