Django 以一种形式编辑模型对象和引用对象

标签 django forms model foreign-keys django-forms

我认为我需要做的实际上与内联表单集相反。

假设我有:

from django.db import models
class Type(models.Model):
    description = models.CharField(max_length=50)
    status = models.ForeignKey(Status)
    def __unicode__(self):
        return self.description

class ColorType(models.Model):
    type = models.ForeignKey(Type)
    color = models.ForeignKey('Color')
    status = models.ForeignKey(Status)
    def __unicode__(self):
        return u'%s %s' % (self.type, self.color)

class Color(models.Model):
    description = models.CharField(max_length=50)
    status = models.ForeignKey(Status)
    types = models.ManyToManyField(type, through=ColorType)
    def __unicode__(self):
        return self.description

class Chair(models.Model):
    description = models.CharField(max_length=50)
    status = models.ForeignKey(Status)
    colorType = models.ForeignKey(ColorType)

现在我需要一个表单来编辑椅子,在其中分别输入颜色和类型(就像显示 ColorType 的模型表单集)。如果组合不存在,应用程序必须创建必要的 ColorType 实例(并为其分配默认状态)并将其分配给椅子。

我认为整个情况很常见,我应该遗漏了一些东西......

最佳答案

我进行了搜索,遗憾的是,目前仅使用 Django 每个表单不可能有多个模型。话虽如此,您并不是唯一一个想这样做的人。

  • 有一个答案 here提出了很好的建议。
  • 如果您仍然想要这样做,您可以使用 something like this 自行推出,但有点不同,因为这个版本接受一种形式或另一种形式,而不是同时接受两种形式。
  • 如果您不想自己编写代码,django-multiform是一个 Django 库,它提供了一种通用的方法来完成您想要的操作。当然,您需要更改 save 方法以应用您的用例(ColorType 组合等)

关于Django 以一种形式编辑模型对象和引用对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21783925/

相关文章:

python - 为什么我的 Amazon S3 key 权限不固定?

python - Django:从模块导入 View 比将它包含在主 views.py 文件中慢吗?

python - Django:将表单放入表单(递归...)

HTML 输入表单错误消息闪烁

css - 像 TwitterBootstrap 3.3.0 一样在 Twitter Bootstrap 2.3.2 中自动折叠

database - Laravel,检查任何相关表中是否存在数据/记录

python - Django 模型同步表

javascript - 如何将表单序列化为对象(具有树结构)?

model-view-controller - 保持模型和 UI 同步的选项(在桌面应用程序上下文中)

C# 设置字符串数组的模型