【问题标题】:Primary key check in djangodjango中的主键检查
【发布时间】:2011-05-17 17:16:06
【问题描述】:

我在模型中有这个自定义主键:

class Personal(models.Model):
    name = models.CharField(max_length=20,primary_key=True)
    email = models.EmailField(blank=True,null=True)

现在我没有得到的是,我怎样才能创建我的视图以便不输入重复记录?我在网上搜索了这个,但可以找到任何技术来创建视图。

这里是视图的代码

def uregister(request):
    errors = []
    if request.method == 'POST':
        if not request.POST.get('txtName', ''):
            errors.append('Enter a Name.')
        if not errors:
            n = request.POST['txtName']
            e = request.POST['txtEmail']
            try:
                per_job = Personal(name=n, email=e)
                per_job.save()
            except IntegrityError:
                return render_to_response('gharnivas/register.html', {'exists': true}, context_instance=RequestContext(request))

            return HttpResponseRedirect('/')
        else:
            return render_to_response('register.html', {'errors': errors}, context_instance=RequestContext(request))

我如何告诉用户,该名称已经存在?

【问题讨论】:

    标签: django django-models primary-key django-views


    【解决方案1】:

    Catch the inevitable exception保存后,告诉他们。

    【讨论】:

    • 我已经更新了views.py,如问题所示。但现在的问题是,数据被覆盖,没有显示任何主键异常。!这在 shell 级别的对象创建中也是一样的。 primary_key 并没有帮助它变得独一无二。 :(
    • 对。那是因为主键不会使其唯一。如果您输入一个具有相同主键的值,那么它将替换现有记录。回到自动主键,将字段改为unique
    【解决方案2】:

    用途:

    per_job.save(force_insert=True)
    

    【讨论】:

      【解决方案3】:

      您正在寻找的是表单和表单验证:

      http://docs.djangoproject.com/en/dev/topics/forms/?from=olddocs#customizing-the-form-template

      定义一个 PersonalForm 类,在表单字段定义或 clean*() 方法中移动您的验证检查,然后在模板中显示来自表单的错误字段。

      表单处理的Django书籍链接:

      http://www.djangobook.com/en/2.0/chapter07/

      【讨论】:

      • 我不问表单提交或使用。请参考我的问题。它是关于,我如何检查主键约束!
      • 好吧..被“视图创建”和“告诉用户”弄糊涂了。
      • 无论如何,如果您有一个 PersonalForm 围绕 Personal 模型,它应该遵守模型中存在的 primary_key=True 约束,并且应该在违反时填写 Form 实例中的错误字段。我认为 Form 是正确的方法,您似乎没有使用它。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-11-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-09-20
      • 2015-10-03
      相关资源
      最近更新 更多