Django ManyToManyField 自定义结构

Django ManyToManyField Custom Structure

是否可以在 Django 中手动指定由 ManyToManyField 创建的 table 的结构?

我正在尝试将 Django 与现有数据库集成,并希望能够使用现有 table 中的数据。无法更改数据库的结构,因为这会破坏使用该数据库的原始应用程序。

如果有帮助,这里是 table 定义:

class People(models.Model):
    person_id  = models.CharField(db_column='PersonId', primary_key=True)
    first_name = models.CharField(db_column='FirstName')
    ...

class PersonCats(models.Model):
    category_id  = models.IntegerField(db_column='PersonCatId', primary_key=True)
    title = models.CharField(db_column='Title', max_length=50)
    ...

class PersonCatPeople(models.Model):   #No primary key on this table
    person_cat_id = models.IntegerField(db_column='PersonCatId)
    person_id     = models.CharField(db_column='PersonId')
    ...

我在您的模型中没有看到任何 ManyToMany 字段,但我认为您正在寻找 ManyToManyFieldthrough 选项。您可以指定一个自定义 table 在您的两个相关 table 之间使用,并且您可以定义其结构(字段):

这里有一个例子:

from django.db import models

class Person(models.Model):
    name = models.CharField(max_length=50)

class Group(models.Model):
    name = models.CharField(max_length=128)
    members = models.ManyToManyField(Person, through='Membership', through_fields=('group', 'person'))

class Membership(models.Model):
    group = models.ForeignKey(Group)
    person = models.ForeignKey(Person)
    inviter = models.ForeignKey(Person, related_name="membership_invites")
    invite_reason = models.CharField(max_length=64)

这取自Django ManyToMany Docs