我对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})
答案 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
字段,一旦您更新了模型,就可以获得使用BarSignUp
(this 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