我正在制作工具库存/跟踪系统。我目前的问题是如何收集当前检出的工具总数,并从我对该工具的总数量中减去该数量。这样我就可以在手边显示数量。因此,用户可以确保该工具当前在商店中,并且不会由借用它的人签出。
模特:
class ActiveTransactionManager(models.Manager):
def get_queryset(self):
return super(ActiveTransactionManager, self).get_queryset().filter(CheckInDate = None)
class Tool(models.Model):
ToolID=models.CharField(max_length=100, primary_key = True, unique=True, db_column='ToolID')
Quantity=models.IntegerField(null=False)
Location=models.CharField(max_length=100, null=False)
CategoryID=models.IntegerField(null=True)
Deleted=models.BooleanField(default=0)
objects=models.Manager()
class Meta:
managed=True
db_table='Tool'
def __unicode__(self):
return self.ToolID
def get_absolute_url(self):
return reverse("ToolSearch:toolSearchResults", kwargs={"pk": self.ToolID})
class ToolCheckIn(models.Model):
CheckOutID=models.AutoField(primary_key=True)
ToolID=models.ForeignKey(Tool, db_column='ToolID', on_delete=models.CASCADE,)
PartyID=models.ForeignKey(Borrower, db_column='PartyID', on_delete=models.CASCADE,)
Quantity=models.IntegerField(null=False)
CheckOutDate=models.DateField(null=False, default=datetime.datetime.now)
CheckInDate=models.DateField(null=True)
Deleted=models.BooleanField(default=0)
objects=ActiveTransactionManager()
class Meta:
managed=True
db_table='ToolTransaction'
ordering=('CheckOutID',)
def __unicode__(self):
return str(self.CheckOutID)
def get_absolute_url(self):
return reverse("ToolSearch:toolCheckin", kwargs={"pk": self.CheckOutID})
查看:
def tool_search(request):
if request.method == 'POST':
instance = None
pk = (request.POST.get('toolid', 'Nothing Found'))
instance = Tool.objects.all().filter(ToolID__icontains=pk)
context = {
"ToolID": instance
}
return render(request, "toolsearchresults.html", context)
return render(request, "toolsearch.html")
我收到此错误:相关字段无效查找:icontains 我删除了上面列出的导致错误的视图中的代码行: queryset = ToolCheckIn.objects.all()。filter(ToolID_id__icontains = pk)
不确定我是否可以从ORM实现此目的,或者我是否需要编写一些原始sql来实现此目的。我目前正在使用MYSQL数据库。
任何想法或想法将不胜感激。
谢谢!
答案 0 :(得分:0)
将评论中的重要信息添加到答案中。
在您的情况下,合适的包含查询将是
if ((x == undefined || x == '') || (y == undefined || y == '')){
z = false;
}else {
z = true;
}
基本上,如果ToolCheckIn.objects.all().filter(ToolID__ToolID__contains=pk)
模型中外键的字段名称是ToolCheckIn
,那么查询就是
stackoverflow
以上表示您使用模型ToolCheckIn.objects.all().filter(stackoverflow__ToolID__contains=pk)
中的外键ToolID
对模型Tool
的{{1}}字段进行包含查询。
如果您对模型stackoverflow
的说法字段ToolCheckIn
进行了包含查询,那么您的查询将看起来像这样
Location
外键是外键或关系来自Tool
的门,而双下划线是相同的路径。
我希望这能为你清除它。
虽然有趣的是要注意下面为什么以下没有工作
ToolCheckIn.objects.all().filter(stackoverflow__Location__contains=pk)
即使是Docs也没有提供有关外键如何保存在表格中的任何信息。在存储之前是格式化还是哈希,以及为什么包含查询会出现model
错误,或者Django是否支持包含查找外键直接,只支持相等查找,即假设外键始终为整数类型,因为外键是主键它来自哪个模型,默认情况下,如果你不提供任何主键,那么Django会自己生成主键哪个 int 类型。因此,当主键可以是 Char 类型的字段时,不会覆盖这种情况,这会带来包含查找的可能性包含不会在 int 类型上工作。
这就是我的想法,因为我在互联网上找不到相关的相关信息。