У меня есть 2 CSV, в соответствии с которыми я должен проектировать базу данных.
первый -
И мой 2-й csv равен
И мой код модели django до сих пор равен
class Restaurant(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
image = models.ImageField(null=True, upload_to='Restaurant')
RestaurantName = models.CharField(max_length=50, null=False, blank=False)
Location = models.TextField(max_length=100, null=False)
Logo = models.ImageField(null=True, upload_to='Logo')
NumberOfTables=models.IntegerField(default=0)
Availability=models.CharField(max_length=100 , choices=Availability_CHOICES )
def __str__(self):
return str(self.RestaurantName)
class Ingredient(models.Model):
restaurant = models.ForeignKey(User, on_delete=models.CASCADE)
name = models.CharField(max_length=255, unique=True)
def __str__(self):
return str(self.name)
class Categories(models.Model):
restaurant = models.ForeignKey(User, on_delete=models.CASCADE)
name = models.CharField(max_length=255, unique=True)
def __str__(self):
return str(self.name)
class ArticlesOptionsChoices(models.Model):
articleoption = models.ForeignKey(User, on_delete=models.CASCADE)
optionname = models.CharField(max_length=255)
choice = models.CharField(max_length=255)
def __str__(self):
try:
return str('optionname={0}, choice={1}'.format(self.optionname, self.choice))
except:
return str(self.optionname)
class ArticlesOptions(models.Model):
restaurant = models.ForeignKey(User, on_delete=models.CASCADE)
name = models.ManyToManyField(ArticlesOptionsChoices,max_length=255)
min = models.IntegerField()
max = models.IntegerField()
choice=models.ForeignKey(ArticlesOptionsChoices, on_delete=models.CASCADE , related_name='user_choice_option')
choice_price=models.DecimalField(max_digits=10, decimal_places=2)
def __str__(self):
return str(self.name)
class Articles(models.Model):
restaurant = models.ForeignKey(User, on_delete=models.CASCADE)
articlename = models.CharField(max_length=50, null=False, blank=False)
price = models.DecimalField(max_digits=10, decimal_places=2)
category = models.ForeignKey(Categories, on_delete=models.CASCADE)
pickuptax = models.FloatField(null=True, blank=True, default=None)
dineintax=models.FloatField(null=True, blank=True, default=None)
description = models.CharField(max_length=500, null=False)
ingredient = models.ManyToManyField(Ingredient) #done
articleoption = models.ForeignKey(ArticlesOptions , on_delete=models.CASCADE)
def __str__(self):
return str(self.articlename)
Я предполагаю, что ресторан является пользователем. Таким образом, реальная проблема заключается в том, как я буду управлять Article Options
в первом CSV со второго CSV. Я сделал Статьи Опции Таблица, которая будет иметь все данные 2-го CSV и далее она имеет таблицу ссылок ArticlesOptionsChoices , чтобы вести запись Имя и выбора из 2-го CSV.
Его общая иерархия похожа на 1 ресторан -> Многие статьи Второй случай Каждая статья -> Параметры статьи 3-й Параметры статьи -> Многие параметры (например, у топпинга есть 4 варианта, и у каждого ресторана может быть несколько вариантов.
Все ли в порядке с дизайном или мне нужно внести изменения? Предложения приветствуются.
Обновление Первый текст CSV
Article name,Price,Category,Taxrate if pickup,Taxrate if dine in,More information,Ingredient (ability to unselect),Article options
Article1,1.90,Pizza,6%,21%,This is a tekst field with more information about the product,Olives@muchrooms@peperoni,Topping
Article2,2.45,Drinks,6%,21%,This is a tekst field with more information about the product,,Free sauce
Article3,3.00,Pasta,21%,21%,This is a tekst field with more information about the product,,Paid sauce
Второй текст CSV
Min/max,Name,Choice ,price
0/4,Topping,Cheese,1.0
0/4,Topping,Milk,2.0
0/4,Topping,Olives,0.50
0/4,Topping,Double cheese,2.0
1/1,Free sauce,Ketchup,0.00
1/1,Free sauce,Mayonaise,0.00
1/1,Free sauce,Bicky,0.00
1/1,Free sauce,Curry,0.00
1/1,Free sauce,andalouse,0.00
0/1,Paid sauce,Ketchup,0.80
0/1,Paid sauce,Mayonaise,0.80
0/1,Paid sauce,Bicky,0.80
0/1,Paid sauce,Curry,0.80
0/1,Paid sauce,andalouse,0.80