我想在模板的外键上显示 Django values() 而不是它的 id 作为对象

Instead of its id, I want to display Django values() on Foreign Key in template as object

我在 Django 中显示外键的值而不是它的 ID 时遇到了一些问题,所以你们能帮我吗?

我的模特:

我有一个捐赠者

class Donor(models.Model):
    donor_first_name=models.CharField(max_length=50)
    donor_middle_name=models.CharField(max_length=50, blank=True, null=True)
    donor_last_name=models.CharField(max_length=50)

我有一匹有捐赠者的马:

lass Horse(models.Model):
    horse_donor=models.ForeignKey(Donor)

我的观点:

def horse_form(request):
if request.method == 'POST':
    form =HorseForm(request.POST, request.FILES)
    if form.is_valid():
        form.save()
        return HttpResponse('<script language="JavaScript"> alert("You have sucessful created a new Volunteer"); location.href="/login/horse/" </script>')
else:
    form = HorseForm()

return render(request, 'loginPortal/horse_form.html', {'form' : form })

我的表格:

class HorseForm(ModelForm):
class Meta:
        model = Horse

我希望能够在马匹表格上显示捐赠者姓名,以便与马匹捐赠者相关联。但是,我的表格只在表格上显示 "donor object" 。有什么可以帮我的吗?谢谢!

您可以这样定义 __str__ 方法:

class Donor(models.Model):
    donor_first_name=models.CharField(max_length=50)
    donor_middle_name=models.CharField(max_length=50, blank=True, null=True)
    donor_last_name=models.CharField(max_length=50)

    def __str__(self):
        return "%s %s %s" % (self.donor_first_name, self.donor_middle_name, self.donor_last_name)

另一种方法是使用 ModelChoiceField 的自定义子类

forms.py

from django import forms
from .models import Donor, Horse

class MyModelChoiceField(forms.ModelChoiceField):
    def label_from_instance(self, obj):
        return "%s %s %s" % (self.donor_first_name, self.donor_middle_name, self.donor_last_name)

class HorseForm(forms.ModelForm):
    horse_donor = forms.MyModelChoiceField(queryset=Donor.objects.all())
    # other fields (if any), class Meta, etc.