【问题标题】:Django model class and relationships between themDjango模型类和它们之间的关系
【发布时间】:2014-11-02 08:43:30
【问题描述】:

我想创建一个模型类“事件”(事件将有两种类型 one_time_event 和 recurring_event),并为“one_time_event”和“recurring_event”创建单独的模型类。

所以在表格事件中,我想要这样的东西

event_id                   event_type(2choices)                    event_type_id
---------------------------------------------------------------------------
1                           one_time_event                one_time_event_Object
2                           recurring_event               recurring_event_object
3                           one_time_event                one_time_event_Object
4                           recurring_event               recurring_event_object

所以问题是我如何定义我的模型类来实现这一点。

提前致谢

【问题讨论】:

    标签: django django-models django-1.7


    【解决方案1】:

    您正在寻找GenericForeignKey,可从contenttypes 贡献的应用程序获得。

    简而言之,您将创建一个可以指向不同模型的键:

    from django.db import models
    from django.contrib.contenttypes.fields import GenericForeignKey
    from django.contrib.contenttypes.models import ContentType
    
    class OneTimeEvent(models.Model):
       # your normal fields here
    
    class RecurringEvent(models.Model):
       # your normal fields here
    
    class Event(models.Model):
       # your normal fields here
       content_type = models.ForeignKey(ContentType)  # A link to any kind of content
       object_id = models.PositiveIntegerField() # The id for the linked object
       event_type = models.GenericForeignKey() # This can point to any kind of object
    

    现在,你可以这样做了:

    recurring_event = RecurringEvent.objects.create()
    event = Event()
    event.event_type = recurring_event
    event.save()
    

    【讨论】:

    • 是的,我可以在 OneTimeEvent 和 RecurringEvent 类中设置其他字段吗?
    • 是的,我只是举了一个例子。这些就像任何其他模型类一样。它们没有什么特别之处。
    猜你喜欢
    • 2012-09-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-26
    • 1970-01-01
    • 2013-03-27
    • 2016-08-27
    相关资源
    最近更新 更多