Django ManyToMany字段上的自定义列名称

时间:2013-08-02 21:16:44

标签: django model django-admin customization django-orm

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

有没有办法让我可以为表中的列提供自定义名称所以,以免在Java中出现Missing列错误。

任何帮助都会非常感激。

3 个答案:

答案 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,巴德明)

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