При попытке отредактировать детскую запись на фабрике Django InlineFormSet, я получаю ошибку ORA-00001: уникальное огранJavascript

Форум по Javascript
Ответить Пред. темаСлед. тема
Anonymous
 При попытке отредактировать детскую запись на фабрике Django InlineFormSet, я получаю ошибку ORA-00001: уникальное огран

Сообщение Anonymous »

Привет, я пытаюсь создать форму с моделями родителей-ребенка, используя Python django inlineformset_factory, но когда я пытаюсь обновить ребенка, он дает мне уникальную ошибку ограничения. Здесь я делюсь своим кодом модели, кодом форм, кодом представлений. Я пытаюсь решить эту проблему с последних двух дней, но не преуспел. Пожалуйста, помогите мне решить проблему. < /p>
class CodeList(models.Model):
listname = models.CharField(db_column='LISTNAME', max_length=20, primary_key=True)
description = models.CharField(db_column='DESCRIPTION', max_length=100)
adddate = models.DateField(db_column='ADDDATE')
addwho = models.CharField(db_column='ADDWHO', max_length=20)
editdate = models.DateField(db_column='EDITDATE')
editwho = models.CharField(db_column='EDITWHO', max_length=20)

class Meta:
db_table ='CODELIST'

def __str__(self):
return f"{self.listname}"

class CodeLkup(models.Model):
listname = models.ForeignKey(CodeList, db_column='LISTNAME', on_delete=models.CASCADE)
code = models.CharField(db_column='CODE', max_length=30, primary_key=True) #,
eng_desc = models.CharField(db_column='ENG_DESC', max_length=250)
bl_desc = models.CharField(db_column='BL_DESC', max_length=250, blank=True)
adddate = models.DateField(db_column='ADDDATE')
addwho = models.CharField(db_column='ADDWHO', max_length=20)
editdate = models.DateField(db_column='EDITDATE')
editwho = models.CharField(db_column='EDITWHO', max_length=20)

class Meta:
db_table = 'CODELKUP'
unique_together = ('listname', 'code')

def __str__(self):
return f"{self.code}-{self.eng_desc}"

class CodeListForm(forms.ModelForm):
class Meta:
model = CodeList

fields = ['listname','description']

widgets ={
'listname' : forms.TextInput(attrs={'class' : 'form-control form-control-sm', 'autocomplete' : 'off'}),
'description' : forms.TextInput(attrs= {'class' : 'form-control form-control-sm' , 'autocomplete' : 'off'})
}

def __init__(self, *args, **kwargs):
is_edit = kwargs.pop('is_edit', False)
self.request = kwargs.pop('request', None)

super(CodeListForm, self).__init__(*args, **kwargs)

if is_edit:
self.fields['listname'].widget.attrs['readonly']=True

def save(self, commit=True):
codelist = super().save(commit=False)

userid = self.request.session.get("UserId")

if self.instance.pk and CodeList.objects.filter(pk=self.instance.pk).exists():
codelist.editdate = timezone.now()
codelist.editwho = userid
else:
codelist.adddate = timezone.now()
codelist.addwho = userid
codelist.editdate = timezone.now()
codelist.editwho = userid

if commit:
codelist.save()
return codelist

class CodeLkupForm(forms.ModelForm):
class Meta:
model = CodeLkup
exclude = ['listname']

fields = ['code', 'eng_desc', 'bl_desc']
widgets = {
'code': forms.TextInput(attrs={'class': 'form-control form-control-sm', 'autocomplete': 'off'}),
'eng_desc': forms.TextInput(attrs={'class': 'form-control form-control-sm', 'autocomplete': 'off'}),
'bl_desc': forms.TextInput(attrs={'class': 'form-control form-control-sm', 'autocomplete': 'off', 'dir': 'rtl'}),
}

def __init__(self, *args, **kwargs):
self.is_edit = kwargs.pop('is_edit', False)
self.request = kwargs.pop('request', None)
#self.parent_instance = kwargs.pop('parent_instance', None)
super().__init__(*args, **kwargs)

# Only disable code field if this is an existing object
if self.is_edit:
self.fields['code'].widget.attrs['readonly']=True

def save(self, commit=True):
codelkup = super().save(commit=False)
userid = self.request.session.get("UserId") if self.request and hasattr(self.request, 'session') else None

if self.instance.pk:
print("a")
codelkup.instance = self.instance
codelkup.editdate = timezone.now()
codelkup.editwho = userid
else:
print("b")
codelkup.adddate = timezone.now()
codelkup.addwho = userid
codelkup.editdate = timezone.now()
codelkup.editwho = userid

if commit:
codelkup.save()
return codelkup

class CustomCodeLkupFormSet(BaseInlineFormSet):
def __init__(self, *args, **kwargs):
#form_kwargs = kwargs.pop('form_kwargs', {})
form_kwargs = kwargs.pop('form_kwargs', {})
self.request = form_kwargs.get('request', None)
self.is_edit = form_kwargs.get('is_edit', False)
#kwargs['form_kwargs'] = kwargs.pop('form_kwargs', {})
kwargs['form_kwargs'] ={'request': self.request, 'is_edit': self.is_edit}
#kwargs['form_kwargs'].update({'request': self.request, 'is_edit': self.is_edit})
super().__init__(*args, **kwargs)

CodeLkupFormSet = inlineformset_factory(
CodeList,
CodeLkup,
form=CodeLkupForm,
formset=CustomCodeLkupFormSet,
extra=1,
can_delete=True
)

def edit_system_codes(request, listname):
is_edit = True
codelist = get_object_or_404(CodeList, listname=listname)
instance = codelist
codelkup =CodeLkup.objects.filter(listname=listname)

if request.method == 'POST':
form = CodeListForm(request.POST or None, request=request, instance=codelist, is_edit=is_edit)
formset = CodeLkupFormSet(request.POST or None, instance=codelist, form_kwargs={
'request': request,
'is_edit': True})

if form.is_valid() and formset.is_valid():
try:
master = form.save()
formset.instance = master
formset.save()

messages.success(request, _("LBL_SAVED"))
return redirect('codes_list')

except IntegrityError as e:
error_msg = str(e)
print(error_msg)
messages.error(request, f'{{ error_msg }}')
except DatabaseError as e:
messages.error(request, f'Database error occured: {str(e)}')
except Exception as e:
messages.error(request, f'unexpected error: {str(e)}')
else:
form = CodeListForm(request=request, is_edit=is_edit, instance=codelist)
formset = CodeLkupFormSet(instance=codelist, form_kwargs={
'request': request,
'is_edit': True})

return render(request, 'system_codes/edit_system_codes.html', {'form' : form, 'formset' : formset})





{% trans "LBL_EDIT_CODES" %}


{% csrf_token %}




{% trans "LBL_LISTNAME" %}*
{{ form.listname }}




{% trans "LBL_DESCRIPTION" %}*
{{ form.description }}


{{ formset.management_form }}

{% trans "LBL_CODELKUP_DETAIL" %}







{% trans "LBL_CODE" %}
{% trans "LBL_DESCRIPTION" %}
{% trans "LBL_BL_DESCRIPTION" %}








{% for f in formset %}

{{ f.code }}
{{ f.eng_desc }}
{{ f.bl_desc }}






{% endfor %}






{% trans "LBL_SAVE_BUTTON" %}
{% trans "LBL_CANCEL_BUTTON" %}





{% include 'loader.html' %}


$(document).ready(function(){
hideLoader();

$('#edit_system_codes_save_button').click(function(){
showLoader();
document.getElementById('edit_system_codes_form').submit();
})
});



Подробнее здесь: https://stackoverflow.com/questions/796 ... -getting-e
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Javascript»