我已经创建了一个模型并与其连接了一个外键,但是当我保存它们时,出现错误无法分配“1”:“SupplierBidModel.Load_ID”必须是“ShipperBoardModel”实例。
我对 Django 相当陌生,甚至对 Django 互连模型概念也比较陌生。知道为什么会发生这种情况吗?我不知道接下来该去哪里,因为 Google 上也没有太多类似的问题。
我的模型.py
class ShipperBoardModel(models.Model):
# Manufaturer_ID
LoadID = models.AutoField(primary_key=True)
From = models.CharField(max_length=100,null=True)
To = models.CharField(max_length=100,null=True)
Type = models.CharField(max_length=100,null=True)
Length = models.CharField(max_length=100,null=True)
Weight = models.CharField(max_length=100,null=True)
Numberoftrucks = models.IntegerField(null=True)
MaterialType = models.CharField(null=True,max_length=100)
Loadingtime = models.DateTimeField(null=True)
# Loadkey = models.ForeignKey()
def _str_(self):
return self.Origin
#
class SupplierBidModel(models.Model):
BidID = models.AutoField(primary_key=True)
Load_ID = models.ForeignKey(ShipperBoardModel,on_delete=models.CASCADE,default=3)
Supplier_ID = models.ForeignKey(SupplierBoardModel,on_delete=models.CASCADE,default=3)
Bid_amount = models.IntegerField(null=True)
class Meta:
unique_together = ('Load_ID', 'Supplier_ID')
View .py
def suppliertablefun (request): # function to display shipperboardmodel
data = ShipperBoardModel.objects.all()
if request.method == 'POST':
forminput = BiddingForm(request.POST)
if forminput.is_valid():
forminput.save()
forminput = BiddingForm(request.POST)
return render(request, 'supplierboard/board.html', locals(), {'forminput': forminput})
PS:我正在尝试预先填写我的表格:
<form action="" method="post">
{# <input type="hidden" value={{item.LoadID}} name="Load_ID" /> #}
<input type="hidden" value={{item.LoadID}} name="Load_ID" />
{{ forminput.Bid_amount }}
<input type="submit" class="btn btn-primary" value="Submit"/>
</form>
我尝试使用正在运行的 value = {{item.LoadID}} 来传递 LoadID 中的当前 LoadID,因为模板中存在这样的 for 循环:
{% for item in data %}
表单.py
class BiddingForm(forms.ModelForm):
Bid_amount = forms.IntegerField()
Load_ID = forms.IntegerField(widget=forms.HiddenInput())
class Meta:
model = SupplierBidModel
exclude = ()
好的,所以我只是通过传递 value={{LoadID}} 而不是 value={{item.LoadID}}
修复了该错误,并且没有错误,但事实并非如此将任何内容保存到数据库中。现在该怎么办?
最佳答案
在代码中的某个位置,您尝试将数字 (1) 分配给 SupplierBidModel.Load_ID
,这是不正确的,因为您的 SupplierBidModel
中有以下内容:
Load_ID = models.ForeignKey(ShipperBoardModel,on_delete=models.CASCADE,default=3,related_name='load')
如果您要使用数字链接 ShipperBoardModel
创建 ShipperBidModel
,那么您需要首先获取相应的对象,大致如下:
# ... you get load_id from the form
shipper_board = ShipperBoardModel.objects.get(pk=load_id)
# then you create the SupplierBidModel instance, adding the other fields that you want
SupplierBidModel.objects.create(LoadId=shipper_board)
你的LoadId
不是一个id,是一个ShipperBoardModel
对象,所以你需要分配对应的。
您的命名约定到处都是,模型字段应该小写,并用下划线分隔。检查文档:Model style
关于python - 无法分配: must be a instance Django foreign Key error,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55418426/