Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/331.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django模型避免重复_Python_Django_Django Models_Django Templates_Django Views - Fatal编程技术网

Python Django模型避免重复

Python Django模型避免重复,python,django,django-models,django-templates,django-views,Python,Django,Django Models,Django Templates,Django Views,在模型中: class Getdata(models.Model): title = models.CharField(max_length=255) state = models.CharField(max_length=2, choices=STATE, default="0") name = models.ForeignKey(School) created_by = models.ForeignKey(profile) def __unicode

在模型中:

class Getdata(models.Model):
    title = models.CharField(max_length=255)
    state = models.CharField(max_length=2, choices=STATE, default="0")
    name = models.ForeignKey(School)
    created_by = models.ForeignKey(profile)

    def __unicode__(self):
        return self.id()
在模板中:

<form>
    <input type="submit" value="save the data" />
</form> 


如果用户单击“保存”按钮并将上述数据保存在表中,如何避免重复,即如果用户再次单击同一个“提交”按钮,则不应为相同的值添加其他条目。还是必须在视图中处理某个字段?

如果单个字段需要唯一,则只需添加
unique=True

class Getdata(models.Model):
    title = models.CharField(max_length=255, unique=True)
    state = models.CharField(max_length=2, choices=STATE, default="0")
    name = models.ForeignKey(School)
    created_by = models.ForeignKey(profile)
如果希望字段组合是唯一的,则需要:


还建议使用独特的方法是最好的方法,但是如果这不适合您的需要,您可以使用表单的clean方法来处理它。乙二醇

def clean(self):
   try:
      Getdata.objects.get(title=self.cleaned_data['title'], 
                          state=self.cleaned_data['state'],
                          name=self.cleaned_data['name'],
                          created_by=self.cleaned_data['created_by'] )
      #if we get this far, we have an exact match for this form's data
      raise forms.ValidationError("Exists already!")
   except Getdata.DoesNotExist:
      #because we didn't get a match
      pass

   return self.cleaned_data

我认为注入Jquery/JS代码来隐藏save按钮是个好主意

创建一个自定义的_validate.js文件,如下所示,并将其放置在静态目录(静态文件目录)中

在admin.py中,添加以下代码

class CustomDataForm(forms.ModelForm):

    class Meta:
        model = GetData

class GetDataAdmin(admin.ModelAdmin):
    # ....
    .....
    form = CustomDataForm

    class Media:
        js = ('/static/custom_validate.js', )

另外,在第二个示例的视图中调用getdata时,默认情况下会返回“title”、“state”和“name”是吗?在视图中引用getdata对象时,会得到一个getdata对象及其所有字段。我还看到,对于多个提交案例,人们输入JavaScript,当单击提交按钮并提交表单时,该JavaScript将禁用该按钮。最好的解决方案可能是所有这些的组合。在我的代码中,我暂时做了相同的事情。但这与其他代码不一致。所以我必须知道这一点。下次我可以使用正确的代码而不是黑客。。
if (!$) {
    $ = django.jQuery;
}

$( document ).ready(function() {
    $("[name=_save]").click(function() {
       $("[name=_save]").css("visibility", "hidden");
    });
});
class CustomDataForm(forms.ModelForm):

    class Meta:
        model = GetData

class GetDataAdmin(admin.ModelAdmin):
    # ....
    .....
    form = CustomDataForm

    class Media:
        js = ('/static/custom_validate.js', )