Django Forms обновляет существующие данные в модели с помощью form.save()

Я хочу проверить форму, а затем:

  • Переопределите существующую строку в intuser, если строка с samAccountName уже существует.
  • Создайте новый объект intuser, если ни один intuser с samAccountName не существует.

models.py

class userdb(models.Model):
    samAccountName= models.CharField(max_length=50, primary_key=True)
    givenName= models.CharField(max_length=100)
    surName= models.CharField(max_length=100)
    accountExpires=models.DateField()
    enabled= models.BooleanField()
    lastLogonDate= models.DateField()
    passwordLastSet= models.DateField()
    department=models.CharField(max_length=50)
    usertype=models.CharField(max_length=3)
    def __str__(self):
        return f"{self.samAccountName}"


class intuser(models.Model):
    samAccountName = models.OneToOneField(
        userdb,
        on_delete=models.CASCADE,
        primary_key=True,
    )
    manager= models.CharField(max_length=100)
    sosafe=models.IntegerField()

form.py

class intUserInfoForm(forms.ModelForm):
    manager =forms.ModelChoiceField(queryset=userdb.objects.all(),widget=forms.Select(attrs={'class':'form-select','data-live-search':'true'}))
    class Meta:
        model=intuser
        fields = '__all__'
        widgets ={
            'sosafe':forms.TextInput(attrs={"class":"form-control"})
        }          

Views.py

 elif(request.POST["usertypeID"]=="int"):
            intForm=intUserInfoForm(request.POST)
            if intForm.is_valid():
                intForm.save()
                data={
                    "usertype":"int",
                    'form':intForm,
                }
                return render(request,'test.html',data)
            else:
                data={
                    "usertype":"int",
                    'form':intForm,
                }
                return render(request,'test.html',data)

Когда я пытаюсь проверить форму с помощью is_valid(), метод возвращает false, когда intuser уже существует. Вероятно, это происходит потому, что OneToOneField в models.py. Как я могу проверить данные, если intuser уже существует.

Кажется, я нашел ответ. Я исключил поле из формы, так что is_valid() больше не валидирует поле:

forms.py

exclude = ('samAccountName',)

Затем я изменил views.py, где я снова добавляю поле в форму, чтобы сохранить его.

views.py

tempform=intForm.save(commit=False)
tempform.samAccountName = userdb.objects.get(samAccountName=request.POST['samAccountName'])
tempform.save()
Вернуться на верх