django - DRY django 模型,创建对象列表

标签 django django-models dry

我有一些用户配置文件模型,我希望能够存储多种类型的信息,但有一些引用(例如家庭或工作电话号码),但我不想使用外键关系...我该怎么做?

类似于:

class Profile(models.Model):
    phone = ? list of some kind ?

    class Phone(???):
        TYPE_CHOICES = (
                ('H', 'Home'),
                ('W', 'Work'),
                ('F', 'Fax'),
                )
        type = models.CharField(max_length = 1, choices = TYPE_CHOICES) 
        number = models.CharField(max_length = 16)
        private = models.BooleanField()

谢谢!

编辑:我不想使用外键只是因为我最初希望与用户相关的所有信息都显示在个人资料管理页面上。但是...嗯...这并不是太关键

最佳答案

为什么不想使用外键?如果您想拥有多个电话号码,那么您需要/必须这样做。

使用 Django 和外键很容易,您可以轻松地将内联模型表单集添加到管理页面中,以创建/编辑包含大量电话号码的用户个人资料。

您的模型应如下所示:

class Profile(models.Model):
    name = models.CharField(max_length=40, verbose_name="User name")

class Phone(models.Model):

    TYPE_CHOICES = (
        ('H', 'Home'),
        ('W', 'Work'),
        ('F', 'Fax'),
    )

    profile = models.ForeignKey(Profile)
    type = models.CharField(max_length = 1, choices = TYPE_CHOICES) 
    number = models.CharField(max_length = 16)
    private = models.BooleanField()

然后,您可以使用类似 this 的内容在一个管理页面中轻松地为每个个人资料添加/编辑多个电话号码。

在您的示例中,您应该执行类似的操作(在 django 应用程序的 admin.py 文件内):

class PhoneInline(admin.TabularInline):
    model = Phone

class ProfileAdmin(admin.ModelAdmin):
    inlines = [
        PhoneInline,
    ]

admin.site.register(Profile, ProfileAdmin)

现在,您可以转到管理界面并尝试添加新的个人资料。您将看到每个配置文件可以添加多部电话。希望对您有帮助...

最后推荐大家参观一下django的tutorials 。您将了解很多事情,并且很好地了解如何使用它们。

关于django - DRY django 模型,创建对象列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10858273/

相关文章:

django - 我应该在 'Server IP Whitelist' facebook 开发者控制台上放置哪个 IP 地址? (来自 Facebook 的 400 错误)

django - 将表达式与 CHECK 约束中的常量进行比较

django - Blank=False,null=False 在模型代码 Django 中不起作用

python - 删除短输入函数中的多余行

java - 如何避免 child 重复构造函数

python - 用户启动的后台进程数量有限

python - 拆分 Django 项目

scala - 有什么方法可以干掉这些用默认值转换数字的函数?

javascript - 从自动完成搜索表单访问数据

python - Django 默认模型字段值