python - 无法分配: must be a instance Django foreign Key error

标签 python django django-models orm foreign-keys

我已经创建了一个模型并与其连接了一个外键,但是当我保存它们时,出现错误无法分配“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/

相关文章:

python - 通过在 Windows7 64 位上复制 'lib' 文件夹来安装 PyCrypto

python - 在 django admin 中对模型中的自定义字段进行排序

jquery - Bootstrap 模式使用 jQuery Tablesorter 选择错误的项目

django - 如何仅在第一次编辑日期时间字段

django - Django 管理表单上的动态过滤

python - 仅使用 python 读取 csv 文件中的某些行

python - OSX 的 Cython 链接错误

django-models - 数据库设计 ManyToMany, OneToMany, ManyToOne, Django 模型

与打包和mayavi相关的Python死锁?

django - 服务器响应终端行分析。响应行的最后一部分是什么?