2

我有一些用户资料模型,我希望能够存储几种类型的信息,但有一些尊重(如家庭或工作电话号码),但我不想使用 ForeignKey 关系......我会怎么做去做?

就像是:

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()

谢谢!

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

4

1 回答 1

3

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

使用 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()

然后,您可以使用类似方法在一个管理页面中轻松添加/编辑每个配置文件的多个电话号码。

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

class PhoneInline(admin.TabularInline):
    model = Phone

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

admin.site.register(Profile, ProfileAdmin)

现在,您可以转到管理界面并尝试添加新的配置文件。您将看到您可以为每个配置文件添加多个电话。我希望它可以帮助你...

最后,我会推荐你​​参观一下 django 的教程。您将了解很多事情,并且对如何使用它有一个很好的了解。

于 2012-06-02T04:59:24.863 回答