【问题标题】:Django query: Getting data over two relationsDjango 查询:通过两个关系获取数据
【发布时间】:2018-04-05 14:23:11
【问题描述】:

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

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

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

一个“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。

【问题讨论】:

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


    【解决方案1】:

    第一个问题:

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

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

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

    【讨论】:

    • 谢谢!有效!不知道您可以通过双下划线遍历表格。如果用户没有用户配置文件,则不允许他与 CalData 交互。所以我想它保持原样:)。由于我的分数低,不能给你一个赞成票:(
    猜你喜欢
    • 2020-12-12
    • 2016-01-06
    • 2016-11-07
    • 1970-01-01
    • 2011-06-27
    • 1970-01-01
    • 2011-03-23
    • 2015-09-18
    • 1970-01-01
    相关资源
    最近更新 更多