В моделях:
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)
Если вы хотите, чтобы комбинация полей была уникальной, вам нужно unique_topting :
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)
class Meta:
unique_together = ["title", "state", "name"]
Предложенный метод unique_together также является лучшим способом, но если он не подходит для ваших нужд, вы можете обработать его в чистом методе вашей формы. например
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