Как сделать модели в Django, которые имеют разные модели внутри, как разные столбцы таблицы? - PullRequest
0 голосов
/ 22 октября 2018

Я новичок в разработке django и застрял в проекте, над которым работаю.Я пытался создать веб-сайт, где несколько человек могут арендовать разные предметы мебели для своих домов за определенный период бронирования, который не может перекрываться для кого-то другого.Таким образом, я подумал, что создам модель мебели и период бронирования с отношением «многие ко многим», как показано ниже

class booking_period(models.Model):
    booking_period_start = models.DateField(auto_now=False)
    booking_period_end = models.DateField(auto_now=False)
    booking_person_name = models.CharField(max_length=200)


class Furniture(models.Model):
    furniture_type = models.CharField(max_length=200)
    furniture_owner_name = models.CharField(max_length=200)
    furniture_booking = models.ManyToManyField(booking_period)

    def __str__(self):
        return self.furniture_type

Затем в администраторе django я добавил класс мебели, чтобы мы могли добавлять моделисами.Проблема заключается в том, что конкретная мебель может иметь несколько периодов бронирования, и они не могут пересекаться друг с другом.Таким образом, у мебели может не быть периода бронирования, в то время как у другой может быть 5 или 10 периодов бронирования.Кроме того, разные предметы мебели могут иметь несколько разные периоды бронирования.Таким образом, если мы добавим все возможные периоды бронирования в период бронирования таблицы, это займет много места.Будет очень полезно, если кто-нибудь подскажет мне лучший способ сделать это, чтобы я мог добавить мебель через админ-панель django.

1 Ответ

0 голосов
/ 22 октября 2018

Вы должны создать новую таблицу, где объедините их обоих.Например:

class Person(models.Model):
    person_name = models.CharField(max_length=200)

    def __str__(self):
        return self.person_name 

class Furniture(models.Model):
    furniture_type = models.CharField(max_length=200)
    furniture_owner_name = models.CharField(max_length=200)

    def __str__(self):
        return self.furniture_type

class Reservation(models.Model):
    person = models.ForeignKey(Person, on_delete=models.SET_NULL)
    furniture= models.ForeignKey(Furnituure, on_delete=models.SET_NULL)
    period_start = models.DateField(auto_now_add=True)
    period_end = models.DateField(null=True) 

Это последнее поле необходимо обработать вручную или отправить в форме.Поле period_start также можно отправить в форме.

...