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 字段,但我认为您正在寻找 ManyToManyField
的 through
选项。您可以指定一个自定义 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 中手动指定由 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 字段,但我认为您正在寻找 ManyToManyField
的 through
选项。您可以指定一个自定义 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)