Django许多字段上的自定义列名

Django许多字段上的自定义列名,django,model,django-admin,customization,django-orm,Django,Model,Django Admin,Customization,Django Orm,我正在django中为java应用程序构建UI。我想根据JPA创建的表创建Java表。为此,当我使用ManyToMany字段时,新创建的中间表具有与JPA不匹配的列名 是否有任何方法可以为表中的列指定自定义名称,以避免在Java中出现缺少列的错误 非常感谢您的帮助。我认为您可以使用参数来完成此操作 这看起来像:my\u m2m\u field=models.ManytoManyField(Model,db\u name=“Desired name”)您可以指定自定义模型,而无需指定任何额外字段。

我正在django中为java应用程序构建UI。我想根据JPA创建的表创建Java表。为此,当我使用ManyToMany字段时,新创建的中间表具有与JPA不匹配的列名

是否有任何方法可以为表中的列指定自定义名称,以避免在Java中出现缺少列的错误


非常感谢您的帮助。

我认为您可以使用参数来完成此操作

这看起来像:
my\u m2m\u field=models.ManytoManyField(Model,db\u name=“Desired name”)
您可以指定自定义模型,而无需指定任何额外字段。然后您可以在
ForeignKey
字段中使用
db\u column=…

class A(models.Model):
    ...

class B(models.Model):
    a = models.ManyToManyField(A, through='C', db_table='customtablename')

class C(models.Model):
    a = models.ForeignKey(A, db_column='customcolumnname')
    b = models.ForeignKey(B, db_column='secondcustomcolumnname')

正如knbk在上面提到的,这确实是一条出路,下面是我做这件事的完整方式

class A(models.Model):
....

class B(models.Model):
    a = models.ManyToManyField(A,through = 'C', db_table = 'customtablename')

class C(models.Model):
    a = models.ForeignKey(A,db_column='customcolumnname')
    b = models.ForeignKey(B,db_column='secondcustomcolumnname')
在管理控制台上显示它之后,您必须使用内联线,以便两个模型可以同时更改。(我认为这也是一个选择/要求的问题)。实现这一点的方法是

在admin.py中

class ABInline(admin.TabularInline):
    model = B.a.through

class AAdmin(admin.ModelAdmin):
    inlines = [ABInline,]

class BAdmin(admin.ModelAdmin):
    inlines = [ABInline,]
    exclude = ('a',)
管理注册网站(B,BAdmin)


此模型可以注册到您想要的任何模型中。

我也尝试使用此模型和db_列,但它不会更改列名。@Akshay您是否删除了生成的表并再次运行了
syncdb
?Django本身无法更改现有表。是的,我总是在对测试代码进行一些更改后删除现有表。到目前为止,我们尝试了很多不同的方法,但都没有成功。我觉得这一定是一件非常琐碎的事情。我想你把
db\u列
db\u名称
参数搞混了。似乎不可能在不使用直通表的情况下更改多对多关系的列名。在这里,您确实可以使用db_column参数,但是使用db_name参数对列名称没有影响。谢谢。但是我确实为显示添加了一些东西,我认为这在使用“through”时是必不可少的。有没有一种方法可以做到这一点而不必创建“through”模型?我正在尝试在多个中间表中有一个自定义外键列。有没有办法让很多人把db_列作为论据?@klandshome总有办法的。有好办法吗?绝对不是。您可以在模型定义(例如,
class\u准备好的
信号)之后直接在
上设置
db\u列
,但不能保证其他一些代码在更改之前不会使用该模型。
toppings=models.ManyToManyField(Topping,db\u table='pizza\u link\u Topping')
不过这个示例可以吗?我的意思是,它可以工作,并且允许中间表具有自定义名称pizza\u link\u table。就是不能让它和自定义外键列一起工作。换句话说,
是最“优雅”的方式吗?仅仅为了获得一个自定义外键列就值得使用它吗?