Получение данных таблицы внешнего ключа из таблицы первичного ключа

Вот мои модели:

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 аналогично с другими полями.

Вернуться на верх