小编man*_*uel的帖子

有没有办法写这些ifs更好?

我需要if用Python 编写这四个.注意它的作用,是在循环中的四种可能状态之间切换:1,0 -> 0,1 -> -1,0 -> 0,-1然后回到第一种状态.

if [dx, dy] == [1,0]:
    dx, dy = 0, 1
if [dx, dy] == 0, 1:
    dx, dy = -1, 0
if [dx, dy] == [-1, 0]
    dx, dy = 0, -1
if [dx, dy] == [0, -1]:
    dx, dy = 1, 0
Run Code Online (Sandbox Code Playgroud)

有谁能建议我更好/更好的方式来写这个?

python control-structure

38
推荐指数
5
解决办法
1990
查看次数

使用相关的ManyToMany字段按距离排序

我有这两个型号.

class Store(models.Model):
    coords = models.PointField(null=True,blank=True)
    objects = models.GeoManager()

class Product(models.Model):
    stores  = models.ManyToManyField(Store, null=True, blank=True)
    objects = models.GeoManager()
Run Code Online (Sandbox Code Playgroud)

我想让产品按距离分类.如果Product中的stores字段是外键,我会这样做并且它可以工作.

pnt = GEOSGeometry('POINT(5 23)')
Product.objects.distance(pnt, field_name='stores__coords').order_by('distance')
Run Code Online (Sandbox Code Playgroud)

但由于该字段是ManyToMany字段,它打破了

ValueError: <django.contrib.gis.db.models.fields.PointField: coords> is not in list
Run Code Online (Sandbox Code Playgroud)

我有点期待这个,因为它不清楚应该用哪个商店来计算距离,但有没有办法做到这一点.

我需要按距离排序到特定点的产品列表.

django django-orm geodjango

8
推荐指数
1
解决办法
439
查看次数

有没有办法在匹配url之前更改request.path?

当我收到包含单词"self"的路径的请求时,我希望在将其与URL匹配之前将其替换为用户ID.我尝试使用这样的中间件:

def process_request(self, request):
    if '/self/' in request.path:
        request.path = request.path.replace('/self/','/' + str(request.user.id) + '/')
Run Code Online (Sandbox Code Playgroud)

替换工作但显然是在URL匹配后完成的.在此之前有没有办法改变路径?

django django-middleware

7
推荐指数
1
解决办法
1922
查看次数

如何在tastypie中创建自定义嵌套ToMany资源?

我在django中有一个稍微复杂的模型结构,其中包含一个UserProfile

class UserProfile(models.Model):
    shoppinglist = models.ManyToManyField(Offer)
    user         = models.OneToOneField(User)
    follows = models.ManyToManyField('self', related_name='followers', symmetrical=False, blank=True)
Run Code Online (Sandbox Code Playgroud)

和报价

class Offer(models.Model):
    description = models.CharField(max_length=200)
Run Code Online (Sandbox Code Playgroud)

这意味着每个用户都可以关注其他用户,并可以使用他们喜欢的优惠创建购物清单.

我可以创建一个查询,以查看优惠是否在我所关注的任何人的购物清单中

profile.follows.filter(shoppinglist=offer)
Run Code Online (Sandbox Code Playgroud)

并返回UserProfile对象的查询集.

现在,我在我的tastypie API中使用了OfferResource和UserProfileResource来代表这两个模型.

我需要做的是,每当我收到一份优惠清单时,都会在每个优惠中添加一个自定义字段,其中包含我所关注的"喜欢"优惠的人员列表.

offer: {
    description: 'Something'
    liked_by: [
        { ... },
        { ... }
    ]
}
Run Code Online (Sandbox Code Playgroud)

我知道我可以覆盖'dehydrate'方法来添加自定义字段但是如果我添加

def dehydrate(self, bundle):
    bundle.data['liked_by'] = profile.follows.filter(shoppinglist=bundle.obj)
Run Code Online (Sandbox Code Playgroud)

在likes_by字段中生成的用户列表未被序列化或脱水.

有任何想法吗?

django tastypie

1
推荐指数
1
解决办法
630
查看次数