我正在尝试显示特定产品的库存记录。在将该产品的ID传递到库存记录时,它显示的int()无效文字的基数为10:“冰淇淋”错误。 我的代码如下所示: models.py
player = [
{"name": "Player One", "letter": "X"},
{"name": "Player Two", "letter": "O"},
]
def print_board(board):
def print_vbars():
print(" | |")
def print_hbars():
print("-----------")
print_vbars()
for row in range(3):
print(" {} | {} | {}".format(*(board[row*3 : row*3+3])))
print_vbars()
print_hbars()
print_vbars()
print_vbars()
def final_state(board):
winning_combinations = (
(0,1,2), # Horizontal top row
(3,4,5), # Horizontal middle row
(6,7,8), # Horizontal bottom row
(0,3,6), # Vertical left row
(1,4,2), # Vertical middle row
(2,5,7), # Vertical right row
(0,4,8), # Downward diagonal
(2,4,6), # Upward diagonal
)
for letter in ("X", "O"):
for combination in winning_combinations:
row_state = (board[index] for index in combination)
if all(map(lambda cell: letter == cell, row_state)):
return "{} wins".format(letter)
if all(map(lambda cell: cell in ("X", "O"), board)):
return "Game is a draw."
return False
def play_game():
board = list(range(9))
starting_player = 0
turn = 0
active_player = starting_player
while final_state(board) is False:
turn += 1
print("Turn {}:".format(turn))
print_board(board)
name, letter = player[active_player]["name"], player[active_player]["letter"]
move = None
while move is None:
try:
move = input("{} please make your move: ".format(name))
move = int(move)
if move in board:
board[move] = letter
print("{} played {} on {}.".format(name, letter, move))
active_player = 1 - active_player
else:
print("Move {} is invalid.".format(move))
move = None
except Exception as e:
print("Move {} is invalid.".format(move))
move = None
print_board(board)
print(final_state(board))
if __name__ == "__main__":
play_game()
views.py 在这种情况下,我试图获取特定产品的对象,并使用它通过filter()获取其库存记录。
class mProduct(models.Model):
mProduct_id=models.AutoField(primary_key=True)
mProduct_name=models.CharField(max_length=50)
mProduct_qtyunit =
models.ForeignKey(mProductUnit,on_delete=models.CASCADE) #Product
##Unit has one to many relationship with
##mProduct
mProduct_qty=models.FloatField(default=0) ##current stock
def __str__(self):
return self.mProduct_name
class mStock(models.Model):
mStock_id=models.AutoField(primary_key=True)
mStock_date=models.DateTimeField(default=timezone.now)
mStock_product=models.ForeignKey(mProduct,on_delete=models.CASCADE)
mStock_qty=models.FloatField()
模板:productlist.html 我通过网址将产品ID传递为参数。
def mStockDetailView(request,id):
model=mStock
m=get_object_or_404(mProduct,mProduct_id=id)
stock=mStock.objects.filter(mStock_product=m.mProduct_name)
context={
'stock':stock,
}
return render(request,'dairyapp/stock-details.html',context)
urls.py
{% for p in product %}
<a href="{% url 'dairyapp:stock-detail' id=p.mProduct_id %}">
{{p.mProduct_name}}</a>
{%endfor%}
尽管如此,我却得到了
以10为底的int()无效文字:“ Ice Cream”错误
任何人都可以提供针对此错误的解决方案吗?
跟踪:
path('stockrecords/<id>',views.mStockDetailView,name='stock-detail'),
答案 0 :(得分:0)
基于回溯,我可以肯定问题出在这条线上:
stock=mStock.objects.filter(mStock_product=m.mProduct_name)
您试图通过过滤指向mProduct对象的外键来获取mStock对象。您正在使用关键字参数mStock_product
,因此传递的值应引用mProduct。您正在传递m.mProduct_name
,它是一个字符串。相反,您应该传递m.mProduct_id
,这是对mProject对象的引用。因此,新行应为:
stock = mStock.objects.filter(mStock_product=m.mProduct_id)
或者您可以让Django找出主键,然后像这样传递对象(感谢A.L.Flanagan指出这一点):
stock = mStock.objects.filter(mStock_product=m)