【问题标题】:How to create models directly for OneToOne Relationships in Django如何在 Django 中直接为 OneToOne 关系创建模型
【发布时间】:2018-08-02 14:04:20
【问题描述】:

据我所知,经过一些配置,我可以在 Django Shell 和管理面板中创建项目。 但我想要的是每次创建“Item”时直接创建的“Item”的“Subitem”。

怎么样:

项目是通过管理员创建的,需要手动创建“Upvote”和“Downvote”子项目。
如何更改 Django 以直接为我创建 Upvote 和 Downvote?

谢谢!

【问题讨论】:

  • 但是如果您想要每个项目都有子项目,那么简单地将数据in 包含在项目中(所以需要一些额外的列)不是很有意义吗?每次创建其他项目看起来也很奇怪。是的,可以使用信号,或修补.save() 函数,但可以绕过这些,而且通常最好按设计强制执行某些东西。
  • 我这样做了,只是添加了 IntegerFields!

标签: django django-models


【解决方案1】:

我没有在每次创建 Item 时添加和创建子项,而是将“Downvotes”添加为 IntegerField。

【讨论】:

    【解决方案2】:

    您只需在创建模型时提及它。 假设你有一个像这样的 Item 模型 -

    class Item(models.Model):
        item_title = models.CharField(blank=True, null=True)
    

    然后如果你想要一对一的字段,那么代码就像

    class SubItem(models.Model):
        item = models.OneToOneField(Item, on_delete=models.CASCADE)
    

    当你创建项目时它会创建子项目。要访问它,您可以使用点符号直接访问。假设你有一个 SubItem 对象sub_item_obj,那么对应的子项目是sub_item_obj.item

    【讨论】:

    • 如果我正确理解了这个问题,那正是 OP 试图避免的:每次自己做这项工作。
    • " 但是我想要的是每次创建“项目”时直接创建的“项目”的“子项目”-可能是我错了。
    • 我想我弄错了,因为在我创建项目时似乎创建了子项目?所以我想我的问题没有意义? ^^
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-12-20
    • 2011-01-16
    • 1970-01-01
    • 2013-01-27
    • 1970-01-01
    • 2021-03-17
    • 2020-10-18
    相关资源
    最近更新 更多