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', )