Дизайн Django Relation для легкого сохранения данных позже - PullRequest
0 голосов
/ 02 октября 2019

У меня есть 2 CSV, в соответствии с которыми я должен проектировать базу данных.

первый -

first table

И мой 2-й csv равен

2nd 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...