/ / Django to_field ne fonctionne pas - django

Django to_field ne fonctionne pas - Django

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 № 1

Champ 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