【发布时间】:2019-06-17 18:27:29
【问题描述】:
我的 django 项目的 models.py 文件中有以下模型
from django.contrib.auth.models import AbstractUser
from django.db import models
from django.conf import settings
class CustomUser(AbstractUser):
pass
# add additional fields in here
class PDFForm(models.Model):
pdf_type=models.IntegerField(default=0)
pdf_name=models.CharField(max_length=100,default='')
file_path=models.FileField(default='')
class FormField(models.Model):
fk_pdf_id=models.ForeignKey('PDFForm', on_delete=models.CASCADE,default=0)
field_type=models.IntegerField(default=0)
field_page_number=models.IntegerField(default=0)
field_x=models.DecimalField(max_digits=6,decimal_places=2,default=0)
field_y=models.DecimalField(max_digits=6,decimal_places=2,default=0)
field_x_increment=models.DecimalField(max_digits=6,decimal_places=2,default=0)
class Meta:
ordering= ("field_page_number", "field_type")
class UserData(models.Model):
fk_user_id=models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE,default=0)
field_type=models.IntegerField(default=0)
field_text=models.CharField(max_length=200,default='')
field_date=models.DateField()
以下是模型的关联方式
1) pdfform 包含一个 pdf 表单及其在文件系统上的路径
2) 一个 pdfform 中有多个 FormFields。每个字段都有属性,具体讨论的是field_type
3) UserData 模型有用户的数据,所以一个用户在这个表中可以有多行。此模型还具有 field_type 列。
我要查询的是找出 Userdata 模型中存在的所有行,这些行存在于 FormField 模型中(与 field_type 匹配)并且属于特定的 PDFForm。
鉴于 django 模型中的多对多关系不可能在没有唯一字段之间发生,如何进行如下查询
select a.*, b.* from FormField a, UserData b where b.fk_user_id=1 and a.fk_pdf_id=3 and a.field_type=b.field_type
我一直在用细齿梳浏览文档,但显然错过了 django 如何创建连接。什么是使上述sql语句发生的方法,所以我得到了所需的数据集?
【问题讨论】:
标签: django django-models orm