我试图在使用表单创建对象基础对象时验证相关对象(ForeignKey)。相关对象可能存在也可能不存在。下面我使用 MPTT,但这是一个一般的外键问题。
我有一个这样的模型:
# model:
class MyMPTTModel(models.Model):
name = models.CharField(max_length=256, unique=True) # this is set
parent = TreeForeignKey('self', on_delete=models.CASCADE, null=True, blank=True, related_name='children')
#form
class MyMPTTModelForm(forms.ModelForm):
parent = mptt_forms.TreeNodeChoiceField(queryset=MyMPTTModel.objects.all())
class Meta:
model = MyMPTTModel
fields = ['name', 'parent']
我想以原子方式获取或创建一组具有形式(集?)的节点。
就像是:
paths = ['each-part/of-the-path/is-the-name', 'each-part/of-the-path/could-have-mutliple-children']
for path in paths:
parent = None
nodes = []
for p in path.split('/'):
nodes.append({'name': p, 'parent': parent })
parent = p
for node in nodes:
name, parent = node.values()
if parent:
parent = MyMPTTModel.objects.get_or_create(name=parent)[0]
MyMPTTModel.objects.get_or_create(name=name)
我正在努力应对get_or_create
作为父级的表单的一部分可能不存在,因此不是有效的选择。我可以在创建下一个节点之前创建父节点,但是当它失败时,由于子节点失败,它会创建一堆孤立节点。
我想验证每个节点并将它们一起创建(或不创建)。
None
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)