4

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

有什么方法可以为表中的列提供自定义名称所以,以免在 Java 中出现 Missing column 错误。

任何帮助将非常感激。

4

3 回答 3

17

您可以指定自定义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')
于 2013-08-03T19:50:28.260 回答
1

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

这看起来像:my_m2m_field=models.ManytoManyField(Model, db_name="Desired Name")

于 2013-08-02T21:20:28.633 回答
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')

在此之后要在管理控制台上显示它,您必须使用内联,以便两个模型可以同时更改。(我认为这又是一个选择/要求的问题)。这样做的方法是,

在 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)

该模型可以注册在您想要的任何模型中。

于 2013-08-06T22:48:44.773 回答