【问题标题】:Django3: How to setup OneToOneField that works with inline admin correctly?Django3:如何正确设置与内联管理员一起使用的 OneToOneField?
【发布时间】: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 的时候。还是我误解了什么?

标签: django django-3


【解决方案1】:

我的问题是on_delete 参数。在删除时,框架现在没有先删除什么。

现在可以了:

class Pipeline(models.Model):
    input_file = models.OneToOneField(
                   'InputFile', 
                   on_delete=models.SET_DEFAULT, 
                   null=True,
                   default='', 
                   parent_link=True
                 )


class InputFile(models.Model):
   pipeline = models.OneToOneField(
                  'Pipeline', 
                  on_delete=models.CASCADE, 
                  null=True,  
                  parent_link=False
              )

【讨论】:

    猜你喜欢
    • 2015-04-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-01
    • 1970-01-01
    • 2017-06-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多