为什么我的模型字段不读取其 ForeignKey 的值,而是 returns 它的对象编号?
Why my model field doesn't read the value of its ForeignKey, it returns its object number instead?
我创建了一个模型,其中有一个我想成为动态下拉列表的字段。我创建了另一个模型并将它们与外键相关联。现在一切正常,除了下拉列表不显示其他模型的值,而是 returns 它的编号对象。
这是我的models.py:
from django.db import models
from django.core.validators import RegexValidator
from django.db.models.deletion import CASCADE
# Create your models here.
class Diagnosis(models.Model):
diagnosis=models.CharField(max_length=30, blank=True)
class InitialData(models.Model):
pattern = RegexValidator(r'RT\/[0-9]{4}\/[0-9]{2}\/[0-9]{4}', 'Enter RT Number properly!')
pattern1 = RegexValidator(r'OOPL\/D\/00[0-9]', 'Enter Case Number properly!')
case_number=models.CharField(max_length=10, primary_key=True, unique=True, validators=[pattern1], blank=True)
date_of_admission=models.DateField(default=None)
date_of_discharge=models.DateField(default=None)
name=models.CharField(max_length=100, default=None)
mr_uid=models.IntegerField(default=None)
rt_number=models.CharField(max_length=15, blank=False, validators=[pattern], default=None)
diagnosis=models.ForeignKey(Diagnosis, on_delete=CASCADE)
forms.py:
class TrackReportForm(ModelForm):
class Meta:
model=InitialData
fields=('case_number', 'date_of_admission', 'date_of_discharge', 'name', 'mr_uid', 'rt_number', 'diagnosis')
class DiagnosisForm(ModelForm):
class Meta:
model=Diagnosis
fields=('diagnosis',)
views.py:
def initialview(request):
if request.method=='POST':
fm_diagnosis=DiagnosisForm(request.POST)
fm_initialdata=TrackReportForm(request.POST)
if fm_diagnosis.is_valid() and fm_initialdata.is_valid:
diagnosis=fm_diagnosis.save()
initial=fm_initialdata.save(False)
initial.diagnosis=diagnosis
initial.save()
fm_diagnosis=DiagnosisForm()
fm_initialdata=TrackReportForm()
return render(request, 'account/database.html', {'form1':fm_diagnosis, 'form2':fm_initialdata})
else:
fm_diagnosis=DiagnosisForm()
fm_initialdata=TrackReportForm()
return render(request, 'account/database.html', {'form1':fm_diagnosis, 'form2':fm_initialdata})
网址:
from account import views
urlpatterns = [
path('admin/', admin.site.urls),
path('data/', views.initialview),
]
模板:
<body>
<form action="" method="post" novalidate>
{% csrf_token %}
{{form1.as_p}}
{{form2.as_p}}
<button type="submit">Save</button>
</form>
</body>
需要更改什么?
您应该实施 __str__
方法来决定如何渲染对象(在本例中为 Diagnosis
):
class Diagnosis(models.Model):
diagnosis=models.CharField(max_length=30, blank=True)
def <b>__str__</b>(self):
return self.diagnosis
我创建了一个模型,其中有一个我想成为动态下拉列表的字段。我创建了另一个模型并将它们与外键相关联。现在一切正常,除了下拉列表不显示其他模型的值,而是 returns 它的编号对象。
这是我的models.py:
from django.db import models
from django.core.validators import RegexValidator
from django.db.models.deletion import CASCADE
# Create your models here.
class Diagnosis(models.Model):
diagnosis=models.CharField(max_length=30, blank=True)
class InitialData(models.Model):
pattern = RegexValidator(r'RT\/[0-9]{4}\/[0-9]{2}\/[0-9]{4}', 'Enter RT Number properly!')
pattern1 = RegexValidator(r'OOPL\/D\/00[0-9]', 'Enter Case Number properly!')
case_number=models.CharField(max_length=10, primary_key=True, unique=True, validators=[pattern1], blank=True)
date_of_admission=models.DateField(default=None)
date_of_discharge=models.DateField(default=None)
name=models.CharField(max_length=100, default=None)
mr_uid=models.IntegerField(default=None)
rt_number=models.CharField(max_length=15, blank=False, validators=[pattern], default=None)
diagnosis=models.ForeignKey(Diagnosis, on_delete=CASCADE)
forms.py:
class TrackReportForm(ModelForm):
class Meta:
model=InitialData
fields=('case_number', 'date_of_admission', 'date_of_discharge', 'name', 'mr_uid', 'rt_number', 'diagnosis')
class DiagnosisForm(ModelForm):
class Meta:
model=Diagnosis
fields=('diagnosis',)
views.py:
def initialview(request):
if request.method=='POST':
fm_diagnosis=DiagnosisForm(request.POST)
fm_initialdata=TrackReportForm(request.POST)
if fm_diagnosis.is_valid() and fm_initialdata.is_valid:
diagnosis=fm_diagnosis.save()
initial=fm_initialdata.save(False)
initial.diagnosis=diagnosis
initial.save()
fm_diagnosis=DiagnosisForm()
fm_initialdata=TrackReportForm()
return render(request, 'account/database.html', {'form1':fm_diagnosis, 'form2':fm_initialdata})
else:
fm_diagnosis=DiagnosisForm()
fm_initialdata=TrackReportForm()
return render(request, 'account/database.html', {'form1':fm_diagnosis, 'form2':fm_initialdata})
网址:
from account import views
urlpatterns = [
path('admin/', admin.site.urls),
path('data/', views.initialview),
]
模板:
<body>
<form action="" method="post" novalidate>
{% csrf_token %}
{{form1.as_p}}
{{form2.as_p}}
<button type="submit">Save</button>
</form>
</body>
需要更改什么?
您应该实施 __str__
方法来决定如何渲染对象(在本例中为 Diagnosis
):
class Diagnosis(models.Model):
diagnosis=models.CharField(max_length=30, blank=True)
def <b>__str__</b>(self):
return self.diagnosis