Django:使用邮政编码拉状态记录列表
我有一个Django应用程序,它有一系列邮编标记的帖子。我想创建一个按州显示所有帖子的页面,但不知道如何处理。我有一个ZipCode表,但我的Post.zipcode字段与它无关(主要是因为它是用户输入的,并且允许不在数据库中或来自美国以外的zip)。Django:使用邮政编码拉状态记录列表
我的相关机型:
class Post(models.Model): body = models.TextField()
zipcode = models.CharField(max_length=5)
class ZipCode(models.Model):
zipcode = models.CharField(max_length=5)
city = models.CharField(max_length=64)
statecode = models.CharField(max_length=2)
statename = models.CharField(max_length=32)
latitude = models.FloatField()
longitude = models.FloatField()
在我的Django的观点我很乐意采取从我的URL模式通过在“状态”参数做这样的事情:
def posts_by_state(request, state): posts = Post.objects.filter(zipcode__statecode=state)
...
不幸的是,我的Post.zipcode字段不是一个外键,邮编,所以如果我尝试我得到这个错误:
FieldError at /post/state/VT/ Join on field 'zipcode' not permitted.
任何人都有一个提示,我应该如何构建一个查询集,将所有帖子都拉到一个请求的状态?先谢谢你。
回答:
我建议将Post.zipcode
更新为ForeignKey
至ZipCode
。如果你不能,你可以做这样的查询:
zipcodes = [zip_code.zipcode for zip_code in ZipCode.objects.filter(statecode=state)] posts = Post.objects.filter(zipcode__in=zipcodes)
在一个侧面说明,ZipCode
似乎并不像该模型正确的名称。也许Location
会更好。
回答:
最后很简单的解决方案。我所做的就是添加一个新的外键字段,以发布所谓的位置,以便邮政现在看起来是这样的:
class Post(models.Model): body = models.TextField()
zipcode = models.CharField(max_length=5)
location = models.ForeignKey(ZipCode, null=True, blank=True, default=None)
当我创造新的帖子,我检查,看看是否输入拉链字符串中的邮编数据库中的记录相匹配,如果它是我创建的位置FK。这允许我在我看来这样做:
def posts_by_state(request, state): posts = Post.objects.filter(location__statecode=state)
...
谢谢赛斯和sdolan的帮助!
以上是 Django:使用邮政编码拉状态记录列表 的全部内容, 来源链接: utcz.com/qa/266714.html