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