Django许多字段上的自定义列名
我正在django中为java应用程序构建UI。我想根据JPA创建的表创建Java表。为此,当我使用ManyToMany字段时,新创建的中间表具有与JPA不匹配的列名 是否有任何方法可以为表中的列指定自定义名称,以避免在Java中出现缺少列的错误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”)您可以指定自定义模型,而无需指定任何额外字段。
非常感谢您的帮助。我认为您可以使用参数来完成此操作 这看起来像:
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。就是不能让它和自定义外键列一起工作。换句话说,到是最“优雅”的方式吗?仅仅为了获得一个自定义外键列就值得使用它吗?