我正在为 django 中的 java 应用程序构建 UI。我想根据 JPA 创建的表创建 Java 表。为此,当我使用 ManyToMany 字段时,新创建的中间表的列名与 JPA 不匹配。
有什么方法可以为表中的列提供自定义名称所以,以免在 Java 中出现 Missing column 错误。
任何帮助将非常感激。
我正在为 django 中的 java 应用程序构建 UI。我想根据 JPA 创建的表创建 Java 表。为此,当我使用 ManyToMany 字段时,新创建的中间表的列名与 JPA 不匹配。
有什么方法可以为表中的列提供自定义名称所以,以免在 Java 中出现 Missing column 错误。
任何帮助将非常感激。
您可以指定自定义through
不指定任何额外字段的情况下指定自定义模型。然后你可以db_column=...
在ForeignKey
字段中使用:
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')
我认为您可以使用db_column参数来完成此操作。
这看起来像:my_m2m_field=models.ManytoManyField(Model, db_name="Desired Name")
正如上面提到的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',)
admin.register.site(B,BAdmin)
该模型可以注册在您想要的任何模型中。