我一直在Django开发一个简单的通讯录应用程序。我想有一个单一的联系人姓名与任何数量的地址通过外键连接到该联系人…足够简单
我的问题是,当inlineformset被发布到服务器时,它总是添加一个新的表条目,尽管表单被正确加载和初始化
例如,若一个联系人有一个工作地址和家庭地址,而我试图“编辑”现有的工作地址…POST视图会创建一个包含所有更新信息的第二个工作地址,那个么我试图编辑的原始条目仍然存在,未被触动。这是我的密码…我遗漏了什么
Model.py
class ContactForm(forms.ModelForm):
class Meta:
model = Contact
fields = ('__all__')
class AddressForm(forms.ModelForm):
class Meta:
model = Address
fields = ('contact','address_name')
AddressFormSet = modelformset_factory(
Address,
AddressForm,)
AddressInlineFormSet = inlineformset_factory(
Contact,
Address,
fields=('address_name',),
extra=0,
min_num=1,
max_num=1,
can_delete=True)
My POST conditional in My views.py我的帖子
我想这就是问题所在…当我编辑时,如何将窗体地址与地址条目对齐
if request.method == 'POST':
## On a POST, Retrieve the QueryDict data coming from AJAX POST
JSON_Datalist = request.POST
## Convert the Data to a Dict
jsonString = json.loads( json.dumps(JSON_Datalist))
formdata = jsonString['form_data']
## Load the cleaned list into a Dict
formdata_dict = json.loads(formdata)
if formdata_dict['address_set-0-contact'] is not None:
contact = get_object_or_404(Contact, pk=formdata_dict['address_set-0-contact'])
contactformset = ContactForm(data=formdata_dict, instance=contact)
# Have we been provided with a valid form?
if contactformset.is_valid():
# Save the new contact to the database.
contactformset.save()
addressformset=AddressInlineFormSet(data=formdata_dict,queryset=contactformset.instance.address_set.all(),instance=contact)
if addressformset.is_valid():
addressformset.save(commit=False)
addressformset.contact=contact
addressformset.save()
else:
print("Address Form is NOT Valid")
print addressformset.errors
return render(request, 'address_book/address_book.html', contacts_dict)
else:
# The supplied form contained errors - just print them to the terminal.
if not contact_form.is_valid():
print("Contact Form errors")
print(contact_form)
print("")
if not addressformset.is_valid():
print("Address Form errors")
print(addressformset)
Jquery w/AJAX
if(buttonValue == 'UpdateButton') {
$( 'form' ).submit(function( event ) {
var $form = ( $(this) ).serializeArray(),
formdata = { },
JSONformdata;
//Prevent Page refresh
event.preventDefault();
//Build Dictionary
$.each($form, function(key, value) {
formdata[value.name] = value.value;
});
JSONformdata = JSON.stringify(formdata);
$.post({
url:'/addressbook/',
data: {
form_data : JSONformdata,
csrfmiddlewaretoken: $('input[name=csrfmiddlewaretoken]').val(),
},
success: function(json) {
$('form#entry_form').remove();
console.log("success post")
}
})
.fail(function() {
console.log("failure");
})
}) ;
}
目前没有回答
相关问题 更多 >
编程相关推荐