Получение данных таблицы внешнего ключа из таблицы первичного ключа
Вот мои модели:
class Customer2(models.Model):
Customer_Name=models.CharField(max_length=30)
Customer_Address=models.CharField(max_length=100)
Customer_Phone=models.IntegerField()
Customer_Email=models.EmailField(max_length=50)
class Meta:
db_table="Customer_Table"
class Product(models.Model):
Product_Name=models.CharField(max_length=100)
Quantity=models.FloatField(max_length=100)
Comming_Date=models.DateField(max_length=15)
Expire_Date=models.DateField(max_length=15)
Comming_Price=models.FloatField(max_length=50)
Picture=models.ImageField(upload_to='Images',blank=True, null=True)
class Sale(models.Model):
Customer=models.ForeignKey(Customer2, default=1, on_delete=models.CASCADE)
Product=models.ForeignKey(Product, default=1, on_delete=models.CASCADE)
Quantity=models.FloatField()
Price=models.FloatField()
Date=models.DateTimeField()
Customer_Name1=models.CharField(max_length=20,default=0)
Product_Name1=models.CharField(max_length=20,default=0)
class Meta:
db_table="Sale_Table"
Я хочу получить или получить или показать все данные модели Sale (класс Sale), но вместо столбцов Customer и Product в таблице Sale (модель), я хочу показать Customer_Name и Product_Name из их собственных таблиц, что я должен сделать?
Для доступа к полям внешних ключей и полям этих моделей используется точечная нотация:
for sale in Sale.objects.all():
print(sale.Customer.Customer_Name, sale.Product.Product_Name)
Разбивается на несколько этапов:
for sale in Sale.objects.all(): # loop through all Sale instances
customer = sale.Customer # get Customer instance
product = sale.Product # get Product instance
print(customer.Customer_Name, product.Product_Name)
Вы можете получить связанные поля следующим образом:
sales = Sale.objects.all().values('Quantity', 'Customer__Customer_Name', 'Product__Product_Name')
# you can include all other fields as comma separated values in values()
for sale in sales:
print(sale)
Я бы предложил сохранять имена столбцов во всех строчных регистрах, так как такова конвенция, например, вместо Customer_Name
просто customer_name
аналогично с другими полями.