Python 是否可以将一个模型的多个字段的主键值保存到另一个模型&x27;s单曲';字段';使用外键关系?
models.py:Python 是否可以将一个模型的多个字段的主键值保存到另一个模型&x27;s单曲';字段';使用外键关系?,python,django,django-rest-framework,Python,Django,Django Rest Framework,models.py: import datetime from django.db import models from pygments.lexers import get_all_lexers LEXERS = [item for item in get_all_lexers() if item[1]] class Classname(models.Model): class_name = models.CharField(max_length=8) def __str
import datetime
from django.db import models
from pygments.lexers import get_all_lexers
LEXERS = [item for item in get_all_lexers() if item[1]]
class Classname(models.Model):
class_name = models.CharField(max_length=8)
def __str__(self):
return self.class_name
class Sectionname(models.Model):
class_name = models.ForeignKey(Classname)
section_name = models.CharField(max_length=1, default='A')
def __str__(self):
return self.section_name
class Teachername(models.Model):
field = """ I want to define here a foreign key field(inherited from Sectionname model)which saves the primary key value of row corresponding to two fields (class_name, section_name) above."""
teachname = models.CharField(max_length=50, verbose_name='teacher Name')
def __str__(self):
return self.teachname
class Attendancename(models.Model):
teacher_name = models.ForeignKey(Teachername)
date = models.DateField('Date')
intime = models.TimeField('IN-TIME')
outtime = models.TimeField('OUT-TIME')
def hours_conversion(self):
tdelta = (datetime.datetime.combine(datetime.date.today(),self.outtime) - datetime.datetime.combine(datetime.date.today(),self.intime))
hours, minutes = tdelta.seconds//3600, (tdelta.seconds//60)%60
return '{0}hrs {1}mins'.format(hours, minutes)
def __str__(self):
return "%s" %self.teacher_name
forms.py:
from django import forms
from django.forms import ModelForm
from .models import Classname, Sectionname, Teachername, Attendancename
class ClassnameForm(ModelForm):
class_name = forms.CharField(max_length=8)
class Meta:
model = Classname
fields = ('class_name',)
class SectionnameForm(ModelForm):
class_name = forms.ModelChoiceField(queryset=Classname.objects.all())
class Meta:
model = Sectionname
fields = ('section_name', 'class_name',)
class TeachernameForm(ModelForm):
field = """ Here I also want to do the same thing, I tried to make a form field, which shows value of both 'section_name' and 'class_name' from above model but only saves the value of corresponding row's primary key."""
class Meta:
model = Teachername
fields = ('classname', 'secname', 'teachname',)
class AttendancenameForm(ModelForm):
teacher_name = forms.ModelChoiceField(queryset=Teachername.objects.all())
class Meta:
model = Attendancename
fields = ('teacher_name', 'date', 'intime', 'outtime',)
我试图将Sectionname模型字段的“pk”值('calss_name'
,'section_name'
)保存到Terachername模型的单个'field'
)中,我还想使用表单字段'field'
向用户显示这两个值,但在场景之后,只需要保存主键值
有可能吗?如果是,那么我如何在我的应用程序中实现它
求你了!提供你的建议
谢谢!提前…您不能在一个模型中存储两个外键到两个不同的表。ForeignKey
字段,而且它真的没有任何意义(如果原因对您来说不明显,那么您应该进一步了解关系模型)
但是无论如何:由于一个Sectionname
属于一个Classname
,您不需要任何东西,除了Sectionname
pk就可以获得相关的Classname
:
class Teachername(models.Model):
sectionname = models.ForeignKey(Sectionname)
teachname = models.CharField(max_length=50, verbose_name='teacher Name')
def __str__(self):
return self.teachname
teacher = Teachername.objects.get(pk=XXX)
print teacher, teacher.sectionname, teacher.sectionname.classname
或者,如果一名教师应教授多个部分:
class Teachername(models.Model):
sectionnames = models.ManyToMany(Sectionname)
teachname = models.CharField(max_length=50, verbose_name='teacher Name')
def __str__(self):
return self.teachname
teacher = Teachername.objects.get(pk=XXX)
for sectionname in teacher.sectionnames.all():
print teacher, sectionname.classname
为什么不将
字段
定义为指向节名
模型的外键
?