Django外键使用示例:实现类似Left Join的数据关联
本文介绍Django中如何使用ForeignKey建立模型间关系,替代原生SQL的Left Join操作。通过定义Province、School和Person模型,利用ModelForm简化表单处理,并在视图中保存数据。模板中通过外键字段访问关联表属性,实现数据的完整展示与操作。
Django外键使用示例:实现类似Left Join的数据关联
Django外键使用示例:实现类似Left Join的数据关联
外键关联与模型封装
由于Django将数据库表封装为模型以保障安全与便利,许多原生SQL功能(如Left Join)无法直接使用。此时,可以通过定义外键(ForeignKey)来建立表与表之间的关联关系。
模型定义
模型定义
# 在models.py 中添加
# Person 模型有两个外键, School和Province
#
class Province(models.Model):
name = models.CharField('省份', max_length = 10)
post = models.CharField('邮编', max_length = 10)
def __str__ (self):#在Python2中用__unicode__替换__str__
return self.name
# class School_Type(models.Model):
# school_type = models.CharField('学校类别')
class School(models.Model):
id = models.IntegerField('学校编号', primary_key=True)
name = models.CharField('学校名称', max_length=200)
address = models.CharField('学校地址', max_length=200)
def __str__ (self):#在Python2中用__unicode__替换__str__
return self.name
class Person(models.Model):
name = models.CharField('姓名', max_length=50)
age = models.IntegerField('年龄')
address = models.CharField('地址', max_length=100)
email = models.EmailField('电子邮件')
school = models.ForeignKey(School, on_delete=models.CASCADE)
province = models.ForeignKey(Province, on_delete = models.CASCADE)
ModelForm配置
ModelForm配置
由于Form的字段与Model的字段一致,可直接使用ModelForm。在使用ModelForm时,外键字段会显示为ChoiceField,其显示内容为__str__()方法返回的字符串。
ModelForm配置代码示例
# 因为Form的字段跟model的字段相同,所以我们直接使用 ModelForm
class PersonForm(ModelForm):
class Meta:
model = Person
fields = '__all__'
数据保存
数据保存
视图保存逻辑
views.py 中的view,可以直接使用 form.save() 来保存form
def person(request):
if request.POST:
form = PersonForm(request.POST)
if form.is_valid():
p = form.save()
return HttpResponse(request, 'success')
else:
return HttpResponse(request, 'fail')
else:
form = PersonForm()
person_list = Person.objects.all()
# school_list = person_list.School_set.all()
return render(request, 'person.html', locals())
模板文件person.html
模板文件person.html
在模板中,可以通过person.外键字段.外键表属性的方式访问关联数据,例如通过person.school.province.post获取省份邮编信息。
模板代码示例
{% extends 'base.html' %}
{% block content %}
<form action="." method="POST">
{% csrf_token %}
{{ form }}
<input type="submit" value='submit' />
</form>
{# #}
{% for person in person_list %}
<p>name:{{ person.name }}; age: {{ person.age }}; school:{{ person.school}}
{{ person.province.post }}
</p>
{% endfor %}
{# {{ school_list }}#}
{% endblock %}
总结
以上即为Django中ForeignKey外键使用的完整示例,旨在帮助开发者理解如何利用外键实现类似Left Join的数据关联功能。希望本文内容对读者有所帮助,欢迎继续支持本站获取更多技术分享。
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









