以10为底的int()的无效文字:“ Ice Cream”错误

时间:2018-11-27 17:28:59

标签: python django django-models django-templates django-views

我正在尝试显示特定产品的库存记录。在将该产品的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'),

1 个答案:

答案 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)
相关问题