Python 如何在ForeignKey字段中使用Django中自动创建的隐式模型类?

Python 如何在ForeignKey字段中使用Django中自动创建的隐式模型类?,python,django,django-models,Python,Django,Django Models,在Django,我有以下型号 在Supervisor模型中,我有一个多对多字段,没有显式定义的贯穿表。在主题模型的ForeignKey字段中,我想提到自动创建的中间模型(由主管模型中的多对多字段创建),但我不知道中间模型的名称是什么(因此我在那里写了“?”,而不是名称) 说明“如果未指定显式直通模型,则仍然可以使用隐式直通模型类直接访问为保存关联而创建的表。” 如何在ForeignKey字段中使用Django中自动创建的隐式模型类 import re from django.db import

在Django,我有以下型号

在Supervisor模型中,我有一个多对多字段,没有显式定义的贯穿表。在主题模型的ForeignKey字段中,我想提到自动创建的中间模型(由主管模型中的多对多字段创建),但我不知道中间模型的名称是什么(因此我在那里写了“?”,而不是名称)

说明“如果未指定显式直通模型,则仍然可以使用隐式直通模型类直接访问为保存关联而创建的表。”

如何在ForeignKey字段中使用Django中自动创建的隐式模型类

import re
from django.db import models

class TopicGroup(models.Model):
    title = models.CharField(max_length=500, unique='True')

    def __unicode__(self):
        return re.sub(r'^(.{75}).*$', '\g<1>...', self.title)

    class Meta:
        ordering = ['title']

class Supervisor(models.Model):
    name = models.CharField(max_length=100)
    neptun_code = models.CharField(max_length=6)
    max_student = models.IntegerField()
    topicgroups = models.ManyToManyField(TopicGroup, blank=True, null=True)

    def __unicode__(self):
        return u'%s (%s)' % (self.name, self.neptun_code)

    class Meta:
        ordering = ['name']
        unique_together = ('name', 'neptun_code')

class Topic(models.Model):
    title = models.CharField(max_length=500, unique='True')
    foreign_lang_requirements = models.CharField(max_length=500, blank=True)
    note = models.CharField(max_length=500, blank=True)
    supervisor_topicgroup = models.ForeignKey(???, blank=True, null=True)

    def __unicode__(self):
        return u'%s --- %s' % (self.supervisor_topicgroup, re.sub(r'^(.{75}).*$', '\g<1>...', self.title))

    class Meta:
        ordering = ['supervisor_topicgroup', 'title']
重新导入
从django.db导入模型
类别主题组(models.Model):
title=models.CharField(最大长度=500,unique='True')
def ___; unicode(自):
返回re.sub(r'^(.{75}.*$','\g..,self.title)
类元:
排序=['title']
班主任(模特儿,模特儿):
name=models.CharField(最大长度=100)
neptun_代码=models.CharField(最大长度=6)
max_student=models.IntegerField()
topicgroups=models.ManyToManyField(TopicGroup,blank=True,null=True)
def ___; unicode(自):
返回u“%s(%s)”%(self.name,self.neptun_代码)
类元:
排序=['name']
共同唯一=('name','neptun_code')
课程主题(models.Model):
title=models.CharField(最大长度=500,unique='True')
外国语言要求=models.CharField(最大长度=500,空白=真)
注=models.CharField(最大长度=500,空白=True)
supervisor\u topicgroup=models.ForeignKey(???,blank=True,null=True)
def ___; unicode(自):
返回u'%s---%s'(self.supervisor\u主题组,re.sub(r'^(.{75})。*$,'\g..,self.title))
类元:
排序=['supervisor\u topicgroup','title']

它只是通过被称为——所以在您的情况下,
Supervisor.topicgroups.through


尽管我认为,如果您要在主题模型中明确地引用它,您最好直接将其声明为模型。

非常感谢您的回答。不确定这是否是个好主意,但是可以通过在
admin.py
中注册来从管理站点访问through表:
admin.site.register(Supervisor.topicgroups.through)
。如果您在2020年使用该表,您将无法在contrib.admin中使用编辑此字段,或者您可以应用修复:并面临系统检查错误E300。解决此问题的方法是添加设置“静音系统检查=[“fields.E300”,]”。丑陋,我知道。只是一个链接到。另请参阅Django管理文档。