django inlineformset_工厂删除错误
我的表格有一个奇怪的问题。 当我添加或更新现有模型时,所有模型都能正常工作,但当我选中模板中的单选按钮“删除并保存”时,我出现以下错误------>>>:django inlineformset_工厂删除错误,django,django-forms,django-templates,django-1.8,Django,Django Forms,Django Templates,Django 1.8,我的表格有一个奇怪的问题。 当我添加或更新现有模型时,所有模型都能正常工作,但当我选中模板中的单选按钮“删除并保存”时,我出现以下错误------>>>: TypeError位于/pro/edit/carted/ncavl189kabp97/hozegyc3f93ehb9ana/ “非类型”对象不可调用 申请方式:邮寄 请求URL: Django版本:1.8.3 异常类型:TypeError 异常值: “非类型”对象不可调用 异常位置:C:\Python34\lib\site packages
TypeError位于/pro/edit/carted/ncavl189kabp97/hozegyc3f93ehb9ana/
“非类型”对象不可调用
申请方式:邮寄
请求URL:
Django版本:1.8.3
异常类型:TypeError
异常值:
“非类型”对象不可调用
异常位置:C:\Python34\lib\site packages\django\forms\models.py,保存现有对象,第754行
Python可执行文件:C:\Python34\Python.exe
Python版本:3.4.3
这是我的观点。py
def edit_carted(request, place_code, det_seq):
template_name = 'mealandscoreappmanager/edit_carted.html'
args = {}
args.update(csrf(request))
get_mealplace = get_place_by_code(place_code)
# On recupère le carted correspondant au detseq (equivalent id)
carted_by_seq = get_cartdetail_by_seq(det_seq, get_mealplace)
class RequiredFormSet(BaseInlineFormSet):
def __init__(self, *args, **kwargs):
super(RequiredFormSet, self).__init__(*args, **kwargs)
for form in self.forms:
form.empty_permitted = False
meal_extra_form_set = inlineformset_factory(
CarteDetails,
MealExtra,
form=MealExtraForm,
can_delete=True,
extra=1, )
if request.method == 'POST':
form = CardDetailForm(
request.POST, user=request.user, instance=carted_by_seq)
extra_form_set = meal_extra_form_set(
request.POST, request.FILES, instance=carted_by_seq)
if form.is_valid() and extra_form_set.is_valid():
form.save()
extra_form_set.save()
messages.success(request, DEFAULTMSG)
return HttpResponseRedirect(
reverse(
'manage-core:core-list-cartdetail',
args=(get_mealplace.code, ),
current_app=request.resolver_match.namespace,
)
)
else:
if get_mealplace.partner.account_user.has_perm(
'mealandscoreappmanager.pro_account_manage_{0}'.format(
request.user.profile.mealplace.code)
) is False:
raise PermissionDenied
# On genere le dictionnaire de données
carted_data = get_initial_cartd_data(carted_by_seq)
# On génère un formulaire simple correspondant au data dict
form = CardDetailForm(
initial=carted_data,
user=request.user,
)
extra_form_set = meal_extra_form_set(instance=carted_by_seq)
args['item_id'] = det_seq
args['formset'] = extra_form_set
args['form'] = form
args['partner'] = get_mealplace
return render_to_response(
template_name,
args,
context_instance=RequestContext(request)
)
这是我的formset.js代码
现在,当我编辑现有模型时,所有这些工作都完成了!
但当我选中delete({form.delete}})时,我得到一个错误:“NoneType”对象不可调用
我已经检查了我的错误页面并看到了这条消息<代码>
Z:\utilisateur\Documents\test\mealands\mealandscoreappmanager\views.py in edit_carted
if request.method == 'POST':
form = CardDetailForm(
request.POST, user=request.user, instance=carted_by_seq)
extra_form_set = meal_extra_form_set(
request.POST, request.FILES, instance=carted_by_seq)
if form.is_valid() and extra_form_set.is_valid():
form.save()
extra_form_set.save()
...
messages.success(request, DEFAULTMSG)
return HttpResponseRedirect(
reverse(
'manage-core:core-list-cartdetail',
args=(get_mealplace.code, ),
current_app=request.resolver_match.namespace,
▶ Local vars
C:\Python34\lib\site-packages\django\forms\models.py in save
if not commit:
self.saved_forms = []
def save_m2m():
for form in self.saved_forms:
form.save_m2m()
self.save_m2m = save_m2m
return self.save_existing_objects(commit) + self.save_new_objects(commit)
...
save.alters_data = True
def clean(self):
self.validate_unique()
▶ Local vars
C:\Python34\lib\site-packages\django\forms\models.py in save_existing_objects
# If the pk is None, it means that the object can't be
# deleted again. Possible reason for this is that the
# object was already deleted from the DB. Refs #14877.
if obj.pk is None:
continue
self.deleted_objects.append(obj)
if commit:
obj.delete()
...
elif form.has_changed():
self.changed_objects.append((obj, form.changed_data))
saved_instances.append(self.save_existing(form, obj, commit=commit))
if not commit:
self.saved_forms.append(form)
return saved_instances
▶ Local vars
请告诉我需要帮助!
谢谢拉文
<div class="row">
<div class="col-md-12">
<form role="form form-horizontal" method="POST" action="" class="form-horizontal" enctype="multipart/form-data">
{% csrf_token %}
<div class="form-group">
<div class="col-md-12">
<div class="panel panel-primary">
<div class="panel-heading">{% trans "Définir menu" %}</div>
<div class="panel-body">
{% bootstrap_form form %}
</div>
</div>
</div>
</div>
<div class="form-group">
<div class="col-md-12">
<div class="mealands-mmeal-content">
<div class="mmeal-content-heading">{% trans "Accompagnement (ou supplements)" %} <span class="pull-right"><a href="#" id="add" class="btn btn-primary"><i class="fa fa-plus-circle"></i> {% trans "Ajouter supplément" %}</a></span></div>
<p class="help-block">
</p>
<div class="mmeal-content-body">
{{ formset.management_form }}
<div class="row">
{% for forms in formset %}
{{forms.id}}
<div class="col-md-4 item">
<div lass="form-group">
<label class="control-label" for="{{forms.name.id_for_label}}">
{{forms.name.label}}
{% if forms.name.field.required %}
<span class="special_class">*</span>
{% endif %}
</label>
{{forms.name}}
<div class="input-error-container">
{{ forms.name.errors }}
</div>
</div>
<div lass="form-group">
<label class="control-label" for="{{forms.taxe.id_for_label}}">
{{forms.taxe.label}}
{% if forms.taxe.field.required %}
<span class="special_class">*</span>
{% endif %}
</label>
{{forms.taxe}}
<div class="input-error-container">
{{ forms.taxe.errors }}
</div>
</div>
<div lass="form-group">
<label class="control-label" for="{{forms.dispo.id_for_label}}">
{{forms.dispo}}
{% trans "Disponible ?" %}
{% if forms.dispo.field.required %}
<span class="special_class">*</span>
{% endif %}
</label>
</div>
{% if formset.can_delete %}
{{forms.id}}
<div lass="form-group">
<label class="control-label" for="{{forms.DELETE.id_for_label}}">
{{forms.DELETE}}
{{forms.DELETE.label}}
{% if forms.DELETE.field.required %}
<span class="special_class">*</span>
{% endif %}
</label>
</div>
{% endif %}
<a href="#" class="delete btn btn-danger"><i class="fa fa-times-circle"></i> {% trans "Supprimer supplément" %}</a>
</div>
{% endfor %}
</div>
</div>
</div>
</div>
</div>
{% buttons %}
<button type="submit" class="btn btn-default" name="save_and_add_another">
<i class="fa fa-retweet"></i> {% trans "Enregistrer et ajouter nouveau" %}
</button>
<button type="submit" class="btn btn-primary" name="save">
<i class="fa fa-check-square-o"></i> {% trans "Enregistrer" %}
</button>
{% if item_id %}
<a href="{% url "manage-core:core-delete-cartdetail" partner.code item_id %}" class="btn btn-danger"><i class="fa fa-times-circle"></i> {% trans "Supprimer" %}</a>
{% endif %}
{% endbuttons %}
</form>
</div>
</div>
class CarteDetails(models.Model):
PERIOD_DAY = (
(MORNING, _('Matin')),
(NOON, _('Midi')),
(AFTERNOON, _('Après midi')),
(EVENING, _('Soir')),
)
**Note that sequence is my primary key**
sequence = models.CharField(max_length=25, primary_key=True)
jour = models.CharField(
_('Jour'), max_length=1, choices=DAYSLIST)
period = models.CharField(
_('Période de la journée'),
max_length=1, choices=PERIOD_DAY, default=MORNING)
date_add = models.DateTimeField(auto_now_add=True)
meal = models.ForeignKey(
Meal, verbose_name=_('Plat'), null=True)
# We add s because in view we'll use formset
format = models.ForeignKey(Format, verbose_name=_('Format'), null=True)
price = models.DecimalField(
_('Prix'),
max_digits=8,
decimal_places=2,
db_index=True,
null=True,
)
dispo = models.BooleanField(default=True)
existed = models.BooleanField(default=True)
def __str__(self):
return '%s - %s - %s' % (
self.get_jour_display(),
self.mealformat, self.get_period_display())
class Meta:
ordering = ['sequence']
class MealExtra(models.Model):
name = models.CharField(max_length=30)
taxe = models.DecimalField(
_('Taxe'),
max_digits=8,
decimal_places=2,
db_index=True,
)
carted = models.ForeignKey(CarteDetails, null=True)
formule = models.ForeignKey(MealFormat, null=True)
dispo = models.BooleanField(default=True)
existed = models.BooleanField(default=True)
Z:\utilisateur\Documents\test\mealands\mealandscoreappmanager\views.py in edit_carted
if request.method == 'POST':
form = CardDetailForm(
request.POST, user=request.user, instance=carted_by_seq)
extra_form_set = meal_extra_form_set(
request.POST, request.FILES, instance=carted_by_seq)
if form.is_valid() and extra_form_set.is_valid():
form.save()
extra_form_set.save()
...
messages.success(request, DEFAULTMSG)
return HttpResponseRedirect(
reverse(
'manage-core:core-list-cartdetail',
args=(get_mealplace.code, ),
current_app=request.resolver_match.namespace,
▶ Local vars
C:\Python34\lib\site-packages\django\forms\models.py in save
if not commit:
self.saved_forms = []
def save_m2m():
for form in self.saved_forms:
form.save_m2m()
self.save_m2m = save_m2m
return self.save_existing_objects(commit) + self.save_new_objects(commit)
...
save.alters_data = True
def clean(self):
self.validate_unique()
▶ Local vars
C:\Python34\lib\site-packages\django\forms\models.py in save_existing_objects
# If the pk is None, it means that the object can't be
# deleted again. Possible reason for this is that the
# object was already deleted from the DB. Refs #14877.
if obj.pk is None:
continue
self.deleted_objects.append(obj)
if commit:
obj.delete()
...
elif form.has_changed():
self.changed_objects.append((obj, form.changed_data))
saved_instances.append(self.save_existing(form, obj, commit=commit))
if not commit:
self.saved_forms.append(form)
return saved_instances
▶ Local vars