我想打一個INSERT INTO 2個表:CostItems和CostElements,CostElements具有cost_item從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 =真),我不知道爲什麼它不工作,請幫助!
謝謝回答,我已經嘗試過,但我得到這個錯誤: int()函數的參數必須是一個字符串,一類字節對象,數字,而不是「元組」 隨着第一個跟蹤,它收到22,但沒有說CostItems的實例....不知道該怎麼做,只是沒有任何意義。 – jsanchezs
@jsanchezs我相信你必須通過'ci'作爲參數。之後提出的錯誤與此無關。注意這一點:你必須傳遞你在模型中定義的相同類型的對象。所以,如果你在那裏定義了一個'IntegerField',你應該傳遞一個'integer';如果您將字段定義爲「CharField」,則應傳遞一個字符串等。檢查是否傳遞正確類型的對象作爲參數。檢查這些變量的類型:'des','usd','pes'並檢查它們是否與定義的類型匹配。 – RafaelC
解決了它,在form_save.save之前從變量賦值中移除了逗號,並且它工作正常。非常感謝你! – jsanchezs