在创建之前,在ForeignKeyField中传递实例,Django

时间:2017-08-20 05:37:23

标签: django django-models foreign-keys

我有以下两种模式:

class Parent(models.Model):
   ....

class Children(models.Model):
   parent = ForeignKey('Parent')
   ....

在创建子项时,我必须将Parent作为父项传递,我的问题是我想创建子项本身,当我创建Parent时,就像其他字段一样,就像一个简单的“models.TextField”任何人都可以引导我怎么做?

2 个答案:

答案 0 :(得分:0)

覆盖__init__()模型的Children方法并覆盖save()模型的Parent方法:

<强> __ INIT __:

# in class Children()
def __init__(self, parentID):
    self.parent = parentID
    # ...

保存

# in class Parent()
def save(self, ...):
    # do parent save
    # do parent super().save()

    # PSEUDO CODE # 
    if hasChildren:
        for each childen of parent:
            child = Children(self.id) # <-- entails to overwrite the __init__() method in class Children
            child.save()

此外,您需要渲染选项(children-fields)以与父级一起创建子级。

如果您仅使用django-admin界面,则可以向parent s modelAdmin`添加内联模型。请参阅django docs

答案 1 :(得分:0)

from django.db.models.signals import post_save from django.dispatch import receiver @receiver(post_save, sender=Parent) def create_children(sender, **kwargs): pass 模型的保存方法中添加帖子保存挂钩。

create_children
每当Parent的实例被保存时,

<?php if(!empty($table['data'])){ echo "<table><body>"; foreach($table['data'] as $data){ echo "<tr>"; echo "<td>".$data[0]."</td>"; echo "<td>".$data[1]."</td>"; echo "<td>".$data[2]."</td>"; echo "</tr>"; } echo "</body></table>"; } ?> 都会被调用。

参考