Моделирование баз данных в Django
У меня есть сценарий, для которого я пытаюсь создать модели базы данных, но я не могу найти идеальный способ сделать это Сценарий выглядит следующим образом .
- Допустим, есть компания, которая предоставляет предложение на своем сайте (собственный сайт компании) и другое предложение на другом сайте (например, Amazon) .
- Я хочу хранить данные о компании, для чего я сделал кое-что, как показано ниже.
- Далее я создал Прямые предложения .
- Последним я создал предложение продавцов
- Все модели выглядят следующим образом
class Company(models.Model):
name= models.CharField(max_length=50, null=True)
address= models.CharField(max_length=250, null=True)
class DirectOffers(models.Model):
Smartphone= models.FloatField(max_length=50, null=True)
class VendorsOffers(models.Model):
Smartphone= models.FloatField(max_length=50, null=True)
category = models.CharField(max_length=250, null=True)
owner=models.ForeigKeyField("Company",on_delete=models.CASCADE)
Но вышеизложенное не кажется правильным, поэтому любая помощь или руководство будут очень полезны.
class Company(models.Model):
name= models.CharField(max_length=50, null=True)
address= models.CharField(max_length=250, null=True)
class Offer(models.Model):
owner=models.ForeigKeyField("Company",on_delete=models.CASCADE)
Smartphone= models.FloatField(max_length=50, null=True)
category = models.CharField(max_length=250, null=True)
vendor_only = models.BooleanField(default=False)
# company flag denotes that the offer is only applicable on the company site.
company_only = models.BooleanField(default=False)
# this will create another table `vendor_offers` to store the details of the vendors for which a certain offer is applicable
vendors = models.ManytoManyField("Vendors")
Это также упрощает работу с запросами
#getting offers only for a specific vendor
Offer.objects.filter(vendors__vendor=21)
#getting offers only for vendors
Offer.objects.filter(vendor_only=True)
#getting offers which are available both places
Offer.objects.filter(vendor_only=True,company_only=True)