Django查询:通过两种关系获取数据

时间:2017-10-24 17:19:35

标签: python mysql django django-views foreign-keys

我已经搜索了很多次并且多次阅读此网站https://docs.djangoproject.com/en/1.11/topics/db/queries/,但我仍然无法获得正确的数据。

我使用MAC-Adress扩展了标准的Django-User-Model,因为我稍后会需要它。我也有这样的模型之间的关系:

一个“Django-Standard-User”有一个UserProfile

ONE“UserProfile”有多个CalData

from django.contrib.auth.models import User

class UserProfile(models.Model):
    user = models.OneToOneField(User)
    mac = models.CharField(max_length=17, default='00:00:00:00:00:00')

    def __str__(self):
        return self.user.username

class CalData(models.Model):
    user = models.ForeignKey(UserProfile)
    date = models.DateField(default="1970-01-01")
    timestamp = models.TimeField(default="00:00:00")
    entry_id= models.CharField(max_length=100, default="NoID")

现在从视图中,用户登录后,我想进行如下查询: “给我一个Caldata的查询(不是对象),其中user =”Standard-Django-User的用户名“和Date = Today。

第二个问题是: 将Caldata的ForeignKey设置为“UserProfile”是否更好,或者将其设置为“User”(标准Django-Model)更好。 我的目标是说:一个用户有一个独特的MAC地址和许多CalData。

1 个答案:

答案 0 :(得分:0)

第一个问题:

CalData.objects.filter(user__user__username=request.user.username)

为您提供用户名。 Django中的双下划线表示法非常强大,可以让您遍历表格。如果您拥有正确的中间件,则每个登录的请求都应该有一个用户字段。

第二个问题:如果用户没有UserProfile,您是否希望他们能够与CalData关联?如果是,请链接到User,如果没有,则链接到UserProfile。