j'ai deux tables RoomPriceDetails
et HotelDetails
. RoomPriceDetails
a une clé étrangère que je veux pointer vers le champ de clé primaire nommé hotel_id
de HotelDetails
. j'ai utilisé to_field
attribut pour cela, mais il semble que je me trompe quelque part. Il me montre une erreur comme
ValueError : littéral invalide pour int() avec la base 10 : "BMH-1".
quand j'essaye d'ajouter le hotel_id
"BMH-1" dans RoomPriceDetails
. "BMH-1" est un identifiant d'hôtel dans HotelDetails
. Si je me trompe, quelle est la meilleure façon de faire en sorte que ma clé étrangère pointe vers mon hotel_id
champ dans HotelDetails
accepter ces valeurs.
Mes modèles:
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)
Réponses:
0 pour la réponse № 1Champ automatique ne peut contenir qu'un entier, par défaut Django définit le champ auto.
Un IntegerField qui s'incrémente automatiquementselon les identifiants disponibles. Vous n'aurez généralement pas besoin de l'utiliser directement ; un champ de clé primaire sera automatiquement ajouté à votre modèle si vous ne spécifiez pas le contraire.
Ce que tu veux c'est ajouter clé primaire à votre CharField
Field.primary_key
Si True, ce champ est la clé primaire du modèle.
Dans votre exemple:
class HotelDetails(models.Model):
hotel_id = models.CharField(primary_key=True, db_column="hotel_id", max_length=10)
Le fait que la clé primaire ne soit pas un nombre entier peut diminuer les performances de votre base de données