我需要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)
有谁能建议我更好/更好的方式来写这个?
我有这两个型号.
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)
我有点期待这个,因为它不清楚应该用哪个商店来计算距离,但有没有办法做到这一点.
我需要按距离排序到特定点的产品列表.
当我收到包含单词"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中有一个稍微复杂的模型结构,其中包含一个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字段中生成的用户列表未被序列化或脱水.
有任何想法吗?