Django - 如何从数据库表中提取登录用户数据?

时间:2017-11-24 11:07:01

标签: python mysql django django-templates django-views

我对Django和网络开发相对较新。基本上,我想从数据库表中提取已登录的用户数据,以便他可以在“我的个人资料”中查看/编辑它。页。

我猜测执行此操作的最佳方法是调用已登录的用户' id',然后以某种方式使用它来调用我想要的数据库表中的行?

这是我有多远,但我不想要用户的身份#39;在网址中,我想要用户的行ID'在数据库表中:

urls.py

    url(r'^my-profile/(?P<id>[0-9]+)', my_profile, name="my_profile"),

views.py

    user = request.user

模板

    <a href="{% url 'my_profile' id=user.id %}">My profile</a>

非常感谢任何帮助!

我目前的代码:

models.py

    class BarSignUp(models.Model):

        LOCATION_CHOICES=(
            ("Central London", "Central London"),
            ("North London", "North London"),
            ("East London", "East London"),
            ("South London", "South London"),
            ("West London", "West London"),
        )

        user = models.ForeignKey(User, on_delete=models.CASCADE, null=True)
        name = models.CharField(max_length=50)
        bio = models.CharField(max_length=50)
        area = models.CharField(max_length=50, choices=LOCATION_CHOICES, null=True)
        booking_link = models.CharField(max_length=100, null=True)
        timestamp = models.DateTimeField(auto_now_add=True, auto_now=False)

        def __str__(self):
            return self.email

        def get_absolute_url(self):
            return reverse("barber_profile", kwargs={"id": self.id})

3 个答案:

答案 0 :(得分:1)

如您所知,您可以使用request.user获取登录用户。因此,您可以从正则表达式中删除ID并使用r'^my-profile/$'

然后将您的网址标记更改为{% url 'my_profile' %}

答案 1 :(得分:0)

您的BarSignUp模型在User上有一个ForeignKey,这意味着您可以拥有零,一个或多个(对于&#34的最大可能定义;许多&#34; - 可能是字面意思数百万个与一个给定用户相关的BarSignUp个记录。如果这真的是你想要的,那么request.user.barsignup_set.all()将全部归还(cf the FineManual)。

如果您想要的是每个用户一个BarSignUp,那么您需要一个OneToOne字段而不是ForeignKey字段,一旦您更新了模型,就可以获得使用BarSignUpthis is document too

的当前登录用户request.user.barsignup

答案 2 :(得分:0)

Foreignkey是多对一关系。因此,如果要访问所有已登录用户的BarSignUp数据,则应执行以下操作。

views.py

signups = request.user.barsignup_set.all()

模板

{% for barsignup in signups %}
   {{ barsignup }}   
   {{ barsignup.field }}
{% endfor %}

您的BarSignUp str 方法也有错误,请更正。

def __str__(self):
    return self.user.email  #if you want to display user email 
相关问题