2016-03-03 85 views
0

我有以下型号:我在提交表单时如何创建同一模型的多个实例?

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

class Event(models.Model): 
    event = models.ForeignKey(EventType, null=True, blank=True) 
    name = models.CharField(max_length=128) 
    is_multiple = models.BooleanField(default=False) 
    father_event = models.ForeignKey('self', null=True, blank=True) 
    event_multiple = models.ManyToManyField(EventType, null=True, blank=True) 

    def save(self, *args, **kwargs): 
     if self.name == None or self.name == '': 
      self.name = self.event.name + ' - blabla' 
     super(Event, self).save(*args,**kwargs) 

我需要两个关系从事件类型到事件,因为如果is_multiple = True,我要添加多个事件类型。

基本上,如果一个事件是多个事件,它包含很多事件。所以,我需要为表单中选中的每个EventType创建一个新事件。例如:

MultiEvent 1, is_multiple = True: 
    In the form, selects 3 EventType = TypeA, TypeB, TypeC 
    When I save, it creates 3 Events = TypeA - blabla, TypeB - blabla, TypeC - blabla 

Each of those events has father_event = MultiEvent 1 

我需要帮助来实现这一点。也许你知道一个更好的方法来做到这一点。

任何帮助,将不胜感激。

谢谢。

+0

不能弄死你用'is_multiple'和'event_multiple',只是有一个叫'types'一个'ManyToMany'场? – DaveBensonPhillips

+0

不,因为我使用'is_multiple'作为其他东西(模板,视图,过滤器等)。也许使用'event'和'event_multiple',但是当'is_multiple'为false时,它应该只有一个引用与'EventType' @ user3697163 –

+0

如果设置is_multiple作为模型的属性,返回True,如果类型的数量是> 1? – DaveBensonPhillips

回答

0

我会做这样的事情

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


class Event(models.Model): 
    kind = models.ForeignKey(EventType, null=True, blank=True) 
    name = models.CharField(max_length=128) 
    parent = models.ForeignKey('self', related_name='children', null=True, blank=True) 

### 

type_list = [] 
for name in ('TypeA', 'TypeB', 'TypeC'): 
    type_list.append(EventType.objects.create(name=name)) 


obj = Event.objects.create(
    kind=None, 
    name='Sample MultiEvent', 
    parent=None 
) 

for i, kind in enumerate(type_list): 
    tmp = Event.objects.create(
     kind=kind, 
     name='Subevent {0}.{1}'.format(obj.pk, i), 
     parent=obj 
    ) 

is_event_multiple = obj.children is not None 
相关问题