我目前想要运行一个SQL语句来过滤我的数据库但它访问多个表.从我在本网站上看过的其他例子中,他们都使用不在主键上的外键; 但是,这是我目前的设置.我有两个问题,第一个是SQL过滤器.这些是我的模特:
class UserProfile(models.Model):
user = models.ForeignKey(User, unique=True);
isATutor = models.BooleanField();
timeAvailable = models.CharField(max_length=3);
class TutorProfile(models.Model):
user = models.ForeignKey(User);
language = models.CharField(max_length=30);
unique_together = (("user", "language"), );
class Tutor(models.Model):
user = models.ForeignKey(User);
subject = models.CharField(max_length=30);
unique_together = (("user", "subject"), );
Run Code Online (Sandbox Code Playgroud)
我目前正在使用原始SQL.
def sqlQuery(avail, lang, sub):
from django.db import connection, transaction
cursor = connection.cursor();
cursor.execute("SELECT a.first_name, a.last_name, a.email FROM auth_user a, books_tutor b, books_tutorprofile c, books_userprofile d WHERE a.id = b.user_id AND a.id = c.user_id AND a.id = d.user_id AND b.subject=%s AND c.language=%s AND d.timeAvailable=%s", [sub, lang, avail]);
row = cursor.fetchall();
return row;
Run Code Online (Sandbox Code Playgroud)
timeAvailable采取三个字符串的形式为'MAE',其中M =早上,A =下午,E =晚上,如果不需要,我们将替换 - 例如'M--'仅在早上可用.
所以第一个问题是我希望能够将上述SQL保留为django模型.第二个问题是我需要一种查询MAE的好方法.我想我可能要做8个不同的SQL部分和UNION它们取决于所选择的内容.
谢谢,
史蒂夫
为什么不使用子类?
class UserProfile(User):
time_available = models.CharField(max_length=3);
class Tutor(UserProfile):
subject = models.CharField(max_length=30);
class TutorProfile(Tutor):
language = models.CharField(max_length=30);
class Meta:
unique_together = ['username','subject','language'] # <--- username field from User base class.
Run Code Online (Sandbox Code Playgroud)
通过这种方式,您只需查找TutorProfile实例即可实现连接.
我应该提一下,在使用子类时,会自动从子类创建一个OneToOneField到超类.
| 归档时间: |
|
| 查看次数: |
2723 次 |
| 最近记录: |