所以我正在做一个小的django项目,当我尝试将某些模型内联到管理站点时,我遇到了一些问题。例如:
models.py
class Client(models.Model):
client_name = models.CharField(max_length=100,unique=True,blank=False)
phone_number = models.ForeignKey(Phone)
class Phone(models.Model):
info = models.Charfield("eg. Personal", max_length=20)
number = models.CharField(max_length=20, blank=False)
现在,如果我想让我的客户管理员将phone_number堆叠成内联,我就不能这样做了......而我需要让我的模型像这样:
class Client(models.Model):
client_name = ...
class PhoneAbstract(models.Model):
info = ...
number = ...
class Meta:
abstract = True
class ClientPhone(PhoneAbstract):
client = models.ForeignKey(Client)
...并且每次我想要将手机与模型联系起来时,基本上定义了一个继承PhoneAbstract的新类:(。这很糟糕,但这是我可以做到这一点并获得正确管理界面的唯一方法:
admin.py
class PhoneInline(admin.TabularInline):
model = ClientPhone
class ClientAdmin(admin.ModelAdmin):
inlines = (PhoneInline, )
现在,这很丑陋(对于我尚未受过教育的人来说)并且它使关系变得尴尬......所以,在第一种情况下,有没有办法在我的ClientAdmin中使用外键?也许这就是ModelAdmin.list_select_related的用途,但我不确定...... :(
答案 0 :(得分:1)
我不知道你为什么要这样定义事物。您希望拥有它的方式,一个电话号码可以属于多个客户端,这似乎不太可能。在PhoneNumber模型上使用ForeignKey字段是正确的做法,因为这种关系是有意义的(客户端可以有多个电话号码)。
但是没有必要使用抽象模型和子类化。如果您需要能够将电话号码指向多个不同的模型类别,那么generic relations就是您所需要的。