我正在为django中的java应用程序构建UI。我想根据JPA创建的Java表创建Java表。为此,当我使用ManyToMany字段时,新创建的中间表的列名与JPA的列名不匹配。
有没有办法让我可以为表中的列提供自定义名称所以,以免在Java中出现Missing列错误。
任何帮助都会非常感激。
答案 0 :(得分:13)
您可以指定自定义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')
答案 1 :(得分:1)
我认为您可以使用db_column参数完成此操作。
这看起来像是:my_m2m_field=models.ManytoManyField(Model, db_name="Desired Name")
答案 2 :(得分:0)
正如上面提到的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')
在此之后,为了在管理控制台上显示它,你必须使用内联,以便两个模型可以同时更改。(我认为这也是选择/要求的问题)。这样做的方法是,< / p>
在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,巴德明)
此模型可以注册到您想要的任何型号。