Я хочу сделать вставку в 2 таблицы: CostItems и CostElements, CostElements имеет cost_item как ForeignKey из CostItems, но когда я бегу он показывает мне сообщение об ошибке:Невозможно назначить должен быть экземпляром
Не может присвойте «22»: «CostElements.cost_item» должен быть экземпляром «CostItems» .
Хереса мой код:
Models.py:
class CostItems(ModelAudit):
cost_item = models.AutoField(primary_key = True, verbose_name = 'Item de costo')
group = models.ForeignKey(Groups, verbose_name = 'Grupo')
description = models.CharField(max_length = 100, verbose_name =' Descripcion')
usd_value = models.IntegerField(verbose_name ='Valor en USD')
rer = models.IntegerField(verbose_name = 'TRM')
pesos_value = models.IntegerField(verbose_name = 'Valor en pesos')
supplier = models.ForeignKey(Suppliers, verbose_name = 'Proveedor')
position = models.ForeignKey(Positions, verbose_name = 'Cargo')
observations = models.TextField(max_length = 500, verbose_name = 'Observación')
validity_date = models.DateField(verbose_name = 'Fecha de vigencia')
class CostElements(ModelAudit):
cost_element = models.AutoField(primary_key = True, verbose_name = 'Elemento de costo')
cost_item = models.ForeignKey(CostItems, verbose_name = 'Item de costo')
description = models.CharField(max_length = 100, verbose_name = 'Descripción')
usd_value = models.IntegerField(verbose_name = 'Valor en USD')
pesos_value = models.IntegerField(verbose_name = 'Valor en pesos')
percent = models.IntegerField(verbose_name = 'Porcentaje de peso')
Views.py:
class CostItemInsert(View):
template_name='cost_control_app/home.html'
def post(self, request, *args, **kwargs):
if request.user.has_perm('cost_control_app.add_costitems'):
form_insert = CostItemsForm(request.POST)
if form_insert.is_valid():
form_save = form_insert.save(commit = False)
#import pdb; pdb.set_trace()
des = form_save.description,
usd = form_save.usd_value,
pes = form_save.pesos_value,
form_save.save(force_insert = True)
ci= get_object_or_404(CostItems, cost_item=form_save.cost_item)
cost_element_created = CostElements.objects.create(
description = des,
percent = 100,
usd_value = usd,
pesos_value = pes,
cost_item = ci.cost_item
)
messages.success(request, "Item de costo creado con exíto")
return HttpResponseRedirect(reverse('cost_control_app:cost_item'))
else:
messages.error(request, "No se pudo guardar el registro")
return render(request, self.template_name,{
"form_cost_item":form_insert,
})
else:
messages.error(request, "No tienes permisos para esta acción")
return HttpResponseRedirect(reverse('cost_control_app:home'))
22 ИТС уже создано CostItem ID после form_save.save (force_insert = true), я не знаю, почему это не работает, пожалуйста, помогите !!
Спасибо за ответ, я уже пробовал это, но я получаю эту ошибку: Int() аргумент должен быть строкой, байт-подобный объект или число, а не «кортеж» С первый из них делает трассировку, получает 22, но говорит, что нет экземпляра CostItems .... не знаю, что делать, просто не имеет никакого смысла. – jsanchezs
@jsanchezs Я уверен, что вам нужно передать 'ci' в качестве параметра. Ошибка, возникшая после этого, не имеет к этому никакого отношения. Обратите внимание на это: вы должны передать тот же «тип» объекта, который вы определили в своей модели. Итак, если вы определили «IntegerField» там, вы должны передать «целое число»; Если вы определили поле как «CharField», вы должны передать строку и т. Д. Проверьте, передаете ли вы правильные типы объектов в качестве параметров. Проверьте типы этих переменных: 'des',' usd', 'pes' и проверьте, соответствуют ли они определенным типам. – RafaelC
Решил его, удаляя комы из переменной назначения до form_save.save, и это сработало. Спасибо, много! – jsanchezs