Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/apache/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何在Django的视图中将用户日志字段与其他用户进行比较_Python_Django - Fatal编程技术网

Python 如何在Django的视图中将用户日志字段与其他用户进行比较

Python 如何在Django的视图中将用户日志字段与其他用户进行比较,python,django,Python,Django,假设我有以下模型: 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 P

假设我有以下模型:

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的附加对象,如下所示:

def detail(request, slug):
    instance = Person.objects.all()
    city = ........ # City from city fields at Person model, the city's value from current user logged have their value as city0 and city's values for other user have value as city1, city2, city3 Et seq...

    for distance in instance:            
        # if current user logged are visiting other user detail then compare them each other
        do something for city0 and city1, city0 and city2, city0 and city3 Et seq....
            distance = ... # calculate distance of city's user logged & city's other user
        # I'm not sure what to do in this area so it will get the results of comparing between attribute of current user logged and attribute of other user

        return render(
        request, "detail.html",
        {
            'distance': distance,
        }
    )
*更新

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

user1=Person.objects.getpk=1 你是指这里Person的用户字段吗? 我认为应该是user1=Person.objects.getpk=1.user

而且, 这里

,其中filter方法始终返回QuerySet, 请参阅:

user1=Person.objects.getpk=1 你是指这里Person的用户字段吗? 我认为应该是user1=Person.objects.getpk=1.user

而且, 这里

,其中filter方法始终返回QuerySet,
请参阅:

根据我的理解,很可能许多用户在您的模型中得到了一个slug。所以,如果您想比较记录的用户和使用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对象就是您要查找的对象:

def calculate_distance(user1, user2):
    #do something here like:
    #user1.location.lat user2.location.long etc.
    return distance_between

def detail(request, slug=None):
    instance = Person.objects.get(slug=slug)
    observer_user = request.user

    #added below variable to clarify code
    user_to_be_observed = instance

    return calculate_distance(observer_user, user_to_be_observed)

根据我所了解的情况,很可能很多用户在您的模型中得到了一个slug。所以,如果您想比较记录的用户和使用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对象就是您要查找的对象:

def calculate_distance(user1, user2):
    #do something here like:
    #user1.location.lat user2.location.long etc.
    return distance_between

def detail(request, slug=None):
    instance = Person.objects.get(slug=slug)
    observer_user = request.user

    #added below variable to clarify code
    user_to_be_observed = instance

    return calculate_distance(observer_user, user_to_be_observed)

据我从你的问题中了解,你想计算两个不同用户所在城市之间的距离-一个用户登录并访问该页面,我们称他为访客,另一个用户的页面已被访问,我们称他为主机

您拥有以下模型:

models.py

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

views.py

在您的模板中,您可以访问距离,并可以向访客显示距离,以便访客知道其所在城市与主办城市的距离。
我没有任何关于图书馆的经验,因此,您必须用适当的计算替换伪代码行。

据我从您的问题中了解,您希望计算两个不同用户所在城市之间的距离-一个用户登录并访问该页面,我们称他为访问者,另一个用户的页面已被访问,我们称他为主机

您拥有以下模型:

models.py

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

views.py

在您的模板中,您可以访问距离,并可以向访客显示距离,以便访客知道其所在城市与主办城市的距离。
我对Pyephem库没有任何经验,因此您必须用正确的计算替换伪代码行。

我不理解您所说的每个用户之间的关系。我所能看到的是,您希望基于其他两个属性生成一个属性的值。如果这就是你要找的,我会覆盖save方法并将逻辑放在那里。@cezar谢谢你的回答,我改变了我的问题…get\u object\u或\u 404将返回单个对象或引发404,那么你为什么要做forloop?也不清楚你在问什么。我明白这可能不是很好的解释,但要得到一个高质量的答案,花一分钟的时间弄清楚你到底想要什么。看看你的编辑,你开始的问题和现在的问题相距很远。以数据库中的值为例,展示所需的行为,以便社区能够更好地帮助您。我不理解您所说的每个用户之间的关系。我所能看到的是,您希望基于其他两个属性生成一个属性的值。如果这就是你要找的,我会覆盖save方法并将逻辑放在那里。@cezar谢谢你的回答,我改变了我的问题…get\u object\u或\u 404将返回单个对象或引发404,那么你为什么要做forloop?也不清楚你在问什么。我明白这可能不是很好的解释,但要得到一个高质量的答案,花一分钟的时间弄清楚你到底想要什么。看看你的编辑,你开始的问题和现在的问题相距很远。以数据库中的值为例,展示所需的行为,以便社区能够更好地帮助您。谢谢您的回答。我的问题变了,请再读一遍。对不起,我的语言不太好,无法解释我的需要。谢谢你的回答。这就是我要找的。谢谢你的回答。我的问题变了,请再读一遍。对不起,我的语言不太好,无法解释我的需要。谢谢你的回答。这就是我想要的。谢谢你的回答,我会尝试你的解决方案,成功后接受。我很快就会回来你的答案几乎解决了我的问题
不用于在每个用户之间进行比较。谢谢你的参与。谢谢你的回答,我会尝试你的解决方案并在成功后接受。我很快就会回来。你的答案几乎解决了我的问题,但不是为了比较每个用户。顺便说一句,谢谢你的参与。
from django.views import generic

from .models import Person

class PersonList(generic.ListView):
    model = Person

class PersonDetail(generic.DetailView):
    model = Person

    def get_context_data(self, **kwargs):
        """
        This method add extra values like the distance
        between the Visitor's city and the Host's city.
        """
        context = super(PersonDetail, self).get_context_data(**kwargs)
        visitor = self.request.user
        distance = # pseudocode: visitor.city - self.object.city
        context.update({'distance': distance})
        return context