2014-10-28 45 views
0

我想問一些關於這種情況的問題。 據說我有3張桌子。最佳做法布爾與SQL中的整數

> class Event(models.Model): 
>  class Meta: 
>   verbose_name = _('Event') 
>   verbose_name_plural = _('Events') 
> 
>  def __str__(self): 
>   return self.name 
> 
>  name   = models.CharField(max_length = 255, null = True) 
>  description = models.TextField(null=True) 
>  
>  organizer = models.CharField(max_length=255, null=True) 
>  date_from = models.DateTimeField(null=True) 
>  date_to  = models.DateTimeField(null=True) 
> 
>  address   = models.ForeignKey('location.Address', null=True, blank=True, related_name="event_address") 
>  active = models.BooleanField(default=False) 

> class CityNomad(models.Model): 
>  class Meta: 
>   verbose_name = _('City Nomad') 
>   verbose_name_plural = _('City Nomads') 
> 
>  uid  = models.IntegerField() 
>  event  = models.ForeignKey('event.Event', null=True, blank=True, related_name='citynomad_event') 

> class YourSingapore(models.Model): 
>  class Meta: 
>   verbose_name = _('Your Singapore') 
>   verbose_name_plural = _('Your Singapore') 
> 
>  event = models.ForeignKey('event.Event', null=True, blank=True, related_name='citynomad_event') 
>  ys_priority = models.IntegerField() 

那麼我使用Django的REST框架的意見,將檢索兩種情況下,僅Travelrave事件,然後只CityNomad事件。

所以我想通過以下三種方式:

1.插入事件模型兩列。

is_travelrave = models.BooleanField()

is_citynomad = models.BooleanField()

2.插入單個整數

event_identifier = models.IntegerField()(鑑定爲1 travelrave,2作爲citynomad)

3.創建一個表稱爲event_identifier(具有id和event_identifier_name)

event_identifier = models.ForeignKey( 'event_identifier')有太多的布爾列

會影響性能? 是否有外鍵冗餘?

回答

1

您不必手動執行任何操作。

如果你想獲得的所有CityNomad事件,你可以讓他們像這樣:

Event.objects.filter(citynomad_event__isnull=False) 

但是你要注意related_name財產。在YourSingapore -model中,它與CityNomadrelated_name-屬性相同。

+0

哇謝謝!不知道django能做到這一點,非常感謝你! – dtjokro 2014-10-28 09:24:40