如何在Django视图中比较user logged的字段与其他用户

2024-04-24 19:08:40 发布

您现在位置:Python中文网/ 问答频道 /正文

假设我有以下模型:

import ephem

class Person(models.Model):
        username = models.ForeignKey(User, blank=False)
        slug = models.SlugField(blank=False)
        location = ForeignKey(Location, blank=True) # return longitude & latitude city from Pyephem library
        city = models.CharField(max_length=255, blank=False, default='')

        def __str__(self):
            return self.username

        def get_city(self):
           city = ephem.Observer()
           city.lon = float(self.location.longitude)
           city.lat = float(self.location.latitude)
           return city # return city from location field

        def save(self, *args, **kwargs):
            if not self.pk:
                self.slug = slugify(self.username)
            super(Person, self).save(*args, **kwargs)

如何在django的视图中以编程方式比较日志用户的属性和属性的其他用户的属性?用户名字段基于slug,还有一个来自其他python库(Pyephem)的附加对象,如下所示:

^{pr2}$

*更新

我根据@cezar answer更新了上面的模型,并为city添加了功能:


Tags: 用户模型selffalsecityreturn属性models
3条回答

user1 = Person.objects.get(pk=1) 你是说这里的user字段是Person的吗? 我想应该是user1 = Person.objects.get(pk=1).user

此外,
这里

city1 = Person.objects.filter(city__name='value1')

,其中filter方法始终返回QuerySet, 参见:https://docs.djangoproject.com/en/1.11/ref/models/querysets/

据我所知,根据你的问题,你需要计算两个不同用户城市之间的距离——一个用户登录并访问页面(我们称他为访客),另一个用户的页面已被访问(我们称他为主机)。在

你有模型:

models.py

from django.db import models
from django.utils.text import slugify
from django.contrib.auth import User

class Person(models.Model):
    username = models.ForeignKey(User)
    slug = models.SlugField()
    city = models.ForeignKey(City)

def __str__(self):
    return self.username

# you can generate the slug automatically when a new Person
# is added for first time, it won't change the slug later
def save(self, *args, **kwargs):
    if not self.pk:
        self.slug = slugify(self.username)
    super(Person, self).save(*args, **kwargs)

现在让我们为Person创建通用视图。在

views.py

^{pr2}$

在您的模板中,您可以访问distance,并将其显示给访问者,这样她就可以知道她所在的城市距离宿主所在城市有多远。 我对Pyephem库没有任何经验,所以您必须用适当的计算替换这行伪代码。在

据我所知,很可能很多用户在你的模型中有一个插件。所以,如果你想用一些slug比较日志用户和用户组,我会生成QuerySet,然后进行迭代。在

def detail(request, slug=None):
    instances = Person.objects.filter(slug=slug)

    if instances.count() == 0:
        return HttpResponse('Slug returns 0 matches')
    else:
        for object in instances:
            do something for city0 and city1

好的,谢谢你的更多细节!现在更新后,我认为request.user对象就是您要查找的对象:

^{pr2}$

相关问题 更多 >