2014-09-25 45 views
0

說我有以下的模型的模型:如何實現這些需求

Class Classroom(models.Model): 
    name = CharField(max_length=128) 

起初,我想這Classroom可用要在一年的每週末佔領(包括週六和週日) 。一個人,然後可以來某天在classroom佔用/租用。例如,Foo先生在9月27日看到它可用,並希望在Satuday佔領它。什麼是實現這一邏輯的解決方案(或最好的解決方案)?

什麼是方法?我應該創建另一個表,哪個?我應該添加什麼類型的字段?

非常感謝!

回答

1

也許這樣的事情可以工作:

class Appointment(models.Model): 
    day = models.DateField() 
    available = models.BooleanField(default=True) 
    classroom = models.ManyToManyField(Classroom, related_name='appointments') 

編輯:

情況應該是相當放置在教室和任命和ManyToManyField之間的中間表應該有through=tablename其中tablename是這個名字表。

編輯:

其實我想有一個夜宵,但這個問題現在比我的胃口:)

class Classroom(models.Model): 
    name = CharField(max_length=128) 

class WeekendDay(models.MOdel): # this was before Appointment 
    day = models.DateField() 
    classroom = models.ManyToManyField(Classroom, through="Appointment") 

class Appointment(models.Model) 
    available = models.BooleanField(default=True) 
    weekend_day = models.ForeignKey(WeekendDay, related_name='appointments_per_day') 
    classroom = models.ForeignKey(Classroom, related_name='appointments_per_classroom') 

更重要的我覺得這樣的事情應該工作,如果你有很多教室,這在很多天都可用。通過available字段,您可以查看或設置可用性。如果一個教室被預訂,讓我們在下週六說,那麼它的值應該設置爲False。這應該是基本的骨架,你可以根據你的需要擴展模型。

+0

等等,有了這個M2M領域,我不得不在一年的所有周末期間(一年52個週末,所以在約會時約104個條目)填寫約會。我對嗎?這是你的第一個解決方案...現在我正在看第二個 – 2014-09-25 17:53:20

+0

第二次編輯後的模型很重要。這應該工作。您可以在所有星期六和星期日填寫WeekendDay,還可以使用ChoiceField擴展模型(選項爲「星期六」,「星期天」),因此它比用戶更友好,比擁有日期更好。在中間表中,您將結合預約(教室+週末日)。 – cezar 2014-09-25 18:43:29

+0

太棒了。寶貴的信息。也看起來與這裏的什麼是相似的:https://docs.djangoproject.com/en/1.6/topics/db/models/#extra-fields-on-many-to-many-relationships – 2014-09-25 21:37:11