0

所以我正在做一个小型 django 项目,在尝试将某些模型内联在管理站点中时遇到了一些问题。例如:

模型.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 继承的新类:(。这很糟糕,但这是我可以这样做并获得正确管理界面的唯一方法:

管理员.py

class PhoneInline(admin.TabularInline):
    model = ClientPhone

class ClientAdmin(admin.ModelAdmin):
    inlines = (PhoneInline, )

现在,这太丑陋了(在我还没有受过教育的眼里),它让关系变得尴尬......那么,在第一种情况下,有没有办法在我的 ClientAdmin 中拥有外键?也许这就是 ModelAdmin.list_select_related 的用途,但我不确定...... :(

4

1 回答 1

1

我不知道你为什么要这样定义事物。您想要的方式是,一个电话号码可以属于多个客户,这似乎不太可能。在 PhoneNumber 模型上使用 ForeignKey 字段是正确的做法,因为这样关系才有意义(客户端可以有多个电话号码)。

但是没有必要为抽象模型和子类化而烦恼。如果您需要一个电话号码能够指向多个不同的模型类,那么您需要的是泛型关系。

于 2012-11-16T13:26:14.663 回答