【问题标题】:dynamic UI for updating data using django and mongodb使用 django 和 mongodb 更新数据的动态 UI
【发布时间】:2012-11-15 15:06:06
【问题描述】:

这是我想要达到的目标的要点。我有一个具有固定属性列表的用户列表

EmployeeID
Employee
FirstName
LastName
SSN

这可以很容易地在模型中创建,并且可以生成一个 UI 来输入这些值

我有另一个用户属性列表,它不是固定的,而是动态的。例如,如果员工已婚,如果他是毕业生,我想获取更多信息。基本上,员工的附加属性列表是无限的,并且特定于每个员工。它也在不断变化,因此无法提前计划。用这样的所有字段创建一个表显然没有意义

EmployeeID (foreignKey Employee table)
IsMarried
SpouseName
IsGraduate
GraduationYear
GraduationMajor
GraduationMinor
IsCertified
...

我认为像 mongodb 这样的 NoSql 数据库在这里很有意义。我相信我可以在 mongodb 记录中保存员工的员工 ID 和用户的相关信息。如何创建 UI,以便 HR 人员可以使用表单来编辑/输入此信息?每个用户将有一组不同的属性和相应的文本字段来显示/编辑。有什么建议吗?

【问题讨论】:

    标签: django mongodb


    【解决方案1】:

    对于使用关系数据库的动态属性,您可以尝试以下方法:

    class Employee( models.Model ):
        firstname = models.CharField( max_length=50 )
        lastname  = models.CharField( max_length=50 )
        ssn       = models.IntegerField()
    
    class EmployeeAttribute( models.Model ):
        ATTRIBUTE_CHOICES = (
            (0, 'is_married'),
            (1, 'spouse_name'),
            (2, 'is_graduate'),
                   ...
        )
        name      = models.IntegerField( max_length=3, choices=ATTRIBUTE_CHOICES )
        value     = models.CharField( max_length=255 )
        employee  = models.ForeignKey( 'Employee' )
    

    每当您想要添加一个新属性时,只需将其附加到属性选择的元组中,并增加最后一个数字。

    如果您的目标是不需要在每次需要添加新属性时都编写额外代码,请尝试以下操作:

    class Employee( models.Model ):
        firstname = models.CharField( max_length=50 )
        lastname  = models.CharField( max_length=50 )
        ssn       = models.IntegerField()
    
    class Attribute( models.Model ):
        name      = models.CharField( max_length=50 )
    
    class EmployeeAttribute( models.Model ):
        attribute = models.ForeignKey( 'Attribute' )
        employee  = models.ForeignKey( 'Employee' )
    

    使用这种方法,您至少可以创建一个区域,允许您通过 Django 管理员或自定义模板创建新属性。 获取员工的扩展属性就像这样简单:

    employee = Employee.objects.get( firstname='John', lastname='Doe' )
    extended_attributes = employee.employee_attribute_set.all()
    

    【讨论】:

    • 感谢您的回复。恐怕你误解了我的问题。根据您的回复,我认为您提供了向员工表添加/删除列的选项。但这不满足我的要求,即列是每个员工特定的。例如,员工 1(已婚但不是毕业生)将只有 EmployeeId、FirstName、LastName、SpouseName,但另一位已毕业但单身的员工将有 EmployeeId、FirstName、LastName、GradSchoolName、Major、Minor 等。我希望这更澄清了这个问题。
    猜你喜欢
    • 2017-11-05
    • 1970-01-01
    • 1970-01-01
    • 2021-12-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多