Django to_field无法正常工作

时间:2017-08-20 07:30:00

标签: django

我有两张表RoomPriceDetailsHotelDetailsRoomPriceDetails有一个外键,我想指向hotel_id的名为HotelDetails的主键字段。我为此使用了to_field属性,但似乎我在某些地方出错了。它显示我的错误

  

ValueError:基数为10的int()的文字无效:'BMH-1'

当我尝试在hotel_id中添加RoomPriceDetails'BMH-1'时。 'BMH-1'是HotelDetails的酒店ID。如果我错了,那么让我的外键指向hotel_id中的HotelDetails字段以接受这些值的最佳方法是什么。

我的模特:

class RoomPriceDetails(models.Model):
    room_type = models.CharField(max_length=255, primary_key=True)
    hotel = models.ForeignKey(HotelDetails, to_field='hotel_id')
    price_per_day = models.PositiveIntegerField(default=0)

class HotelDetails(models.Model):
    hotel_id = models.AutoField(primary_key=True, db_column='hotel_id')
    name = models.CharField(max_length=255)
    email = models.CharField(max_length=255)
    reg_no = models.CharField(max_length=255)
    contact_no = models.CharField(max_length=10)
    owner_name = models.CharField(max_length=255)
    owner_email = models.CharField(max_length=255)
    owner_contact_no = models.CharField(max_length=255)
    address = models.CharField(max_length=400)
    city = models.CharField(max_length=255)
    state = models.CharField(max_length=255)
    pincode = models.CharField(max_length=6)

1 个答案:

答案 0 :(得分:0)

Autofield只能保存一个整数,默认情况下Django设置自动字段。

  

IntegerField,根据可用ID自动递增。您通常不需要直接使用它;如果您没有另外指定,主键字段将自动添加到您的模型中。

您希望将primary_key添加到您的CharField

  

Field.primary_key   如果为True,则此字段是模型的主键。

在你的例子中:

class HotelDetails(models.Model):
    hotel_id = models.CharField(primary_key=True, db_column='hotel_id', max_length=10)

主键不是整数会降低您的数据库性能