【发布时间】:2021-04-16 17:41:24
【问题描述】:
我想创建一个管道实例并一起创建相应的输入文件。我的模型我有这样的结构。
class Pipeline(models.Model):
input_file = models.OneToOneField(
'InputFile',
on_delete=models.CASCADE,
null=False,
parent_link=True
)
class InputFile(models.Model):
pipeline = models.OneToOneField(
'Pipeline',
on_delete=models.CASCADE,
null=False,
parent_link=False
)
我尝试了parent_link=True/False 的不同组合,但没有任何效果。但是,只有在创建两个实例的所有位置都设置 parent_link=True 时,才能再次删除它们。
我的admin.py 看起来像:
class InputFileAdmin(admin.StackedInline):
model = InputFile
class PipelineAdmin(admin.ModelAdmin):
inlines = [Inputfile]
admin.site.register(Pipeline, PipelineAdmin)
无论是什么组合,在创建或删除过程中我总是会出错。
【问题讨论】:
-
专业提示:您只需要在其中一个模型类中声明
OneToOneField,而不是两个。 -
这取决于用例。我实际上有比这里更复杂的模型。而且我需要对父级的引用来定义目标路径等。
-
单个声明会自动为相关模型中的父创建一个字段。请参阅示例here。请注意
place是如何仅在Restaurant中声明的,而p2.restaurant是为反向关系自动创建的。 -
是的,但我如何在模型中直接引用它?有一些模型属性取决于管道。该字段将在那里,但没有选项可以引用它。docs.djangoproject.com/en/3.1/ref/models/fields/… 那是应该使用
parent_link的时候。还是我误解了什么?