Избегайте дубликатов, используя django ModelForm - PullRequest
0 голосов
/ 16 сентября 2018

У меня есть следующие Model, ModelForm и View:

class Clinic(models.Model):
    clinicid = models.AutoField(primary_key=True, unique=True)
    name = models.CharField(max_length=60)
    label = models.SlugField(max_length=25)
    # logo =
    email = models.EmailField(max_length=50, default='')
    mobile = models.CharField(max_length=15, default='')
    alternate = models.CharField(max_length=15, default='', blank=True)
    about = models.CharField(max_length=250, blank=True)
    state = models.CharField(max_length=25)
    city = models.CharField(max_length=35)
    locality = models.CharField(max_length=35)
    pincode = models.IntegerField(default=0)
    address = models.TextField(max_length=80, default='', blank=True)
    website = models.URLField(blank=True)

class ClinicMetaForm(ModelForm):
    class Meta:
        model = Clinic
        fields = [
            'name',
            'label',
            'email',
            'mobile',
            'alternate',
            'about',
            'state',
            'city',
            'locality',
            'pincode',            
            'address',
            'website'
        ]
        unique_together = ["name", "mobile", "email"]

def newclinic(request):
    if request.method == 'POST':
        print('New clinic setup')
        form = ClinicMetaForm(request.POST)
        form.save()
        msg = "Successfully saved new clinic"
        print(msg)
    else:
        form = ClinicMetaForm()
        msg=''
    return render(request, 'clinic/newclinic.html', {'form': form, 'msg': msg})

Проблема в том, что при отправке одних и тех же данных я получаю дублирующиеся записи, которые сохраняются, хотя я использую unique_together. Почему это происходит? Как я могу избежать этого?

1 Ответ

0 голосов
/ 16 сентября 2018

Вы должны переместиться unique_together к модели. И если вы хотите добавить логику в вашу форму, просто перезапишите validate_unique

def validate_unique(self):
    #your logic here
    try:
        self.instance.validate_unique(exclude=exclude)
    except ValidationError, e:
        self._update_errors(e.message_dict)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...