我想从相关的外键模型中获取数据,但我无法从相关的模型中获得数据,请告诉我如何做到。我想从Model2
表中显示name
值。。
这是我的models.py
文件。。。
class Customer(models.Model):
cus_name=models.Charfield(blank=True)
class Model1(models.Model):
namefield=models.Charfield(blank=True)
class Model2(models.Model):
name=models.CharField(default=None)
model1=models.Foreignkey(Model1, related_name='model_one', on_delete=models.CASCADE)
customer=models.Foreignkey(Customer, related_name='customer_data', on_delete=models.CASCADE)
这是我的views.py
文件。。。
def display_data(request, id):
test_display=Model1.objects.filter(pk=id).first()
return render(request, 'page.html', {'test_display':test_display})
这是我的test.html
文件,我在其中显示Model2
表中的name
<p>{{test_display.model_one.name}}</p>
首先,使用get()
或get_object_or_404()
方法代替filter(...).first()
:
from django.shortcuts import get_object_or_404
def display_data(request, id):
test_display=get_object_or_404(Model1.objects.prefetch_related('model_one'), pk)
# or Model1.objects.prefetch_related('model_one').get(pk=pk)
return render(request, 'page.html', {'test_display':test_display})
在模板中,使用反向关系查询Model1实例:
{% for object in test_display.model_one.all %}
{{ object.name }}
{% endfor %}
由于ForeignKey的原因,Model1和Model2之间的关系是多对一的,因此您将从反向查询Model2实例中获得多个Model1对象。如果只想为Model2存储一个对象,请考虑使用OneToOne
关系。
首先,您必须修复语法错误:
def display_data(request, id):
test_display = Model2.objects.filter(pk=id).first()
context = {
'test_display': test_display
}
return render(request, 'page.html', context)
# render instead of ender
第二个尝试访问这样的Queryset:
<p>{{ test_display.name }}</p>