pay*_*ike 2 django google-app-engine many-to-many django-nonrel
我在django中构建了一个应用程序,但是因为我发现谷歌应用程序引擎不支持Django开箱即用(免费,云sql不能免费使用吗?).
我决定转移到Django-nonrel,因此很少有datebase字段需要转换,我不知道如何:
class Cate(models.Model):
name = models.CharField(max_length = 100)
description = models.TextField()
create_by = models.ForeignKey(User)
create_date = models.DateTimeField('cate created date')
def __unicode__(self):
return self.name
class Product(models.Model):
product_name = models.CharField(max_length = 200)
owner = models.ForeignKey(User)
cate = models.ManyToManyField(Cate)
timestamp = models.DateTimeField('product added date')
view = models.IntegerField(default = 0)
def __unicode__(self):
return self.product_name
Run Code Online (Sandbox Code Playgroud)
这是user_profile模型,它从用户模型扩展而来
class UserProfile(models.Model):
user = models.OneToOneField(User)
cates = models.ManyToManyField('shop.Cate')
Run Code Online (Sandbox Code Playgroud)
Cate模型由admin创建,UserProfile可以有很多cates,同一个cate可以属于很多用户,与产品相同.
请帮助构建这些模型,并提供一些关于如何使用Django-nonrel的技巧
我是数据库新手
有两种方法可以做到这一点.更便宜的版本是使用ListFields
from djangotoolbox.fields import ListField
class UserProfile(models.Model):
user = models.OneToOneField(User)
cates = ListField(models.ForeignKey(shop.Cate))
Run Code Online (Sandbox Code Playgroud)
ListField只存储一个Cate id列表.这有一些重要的限制.
您的实体限制为1MB,因此这限制了列表中的实体数量.在这种情况下,它仍然是一个相当大的数字,特别是因为你的实体没有别的东西.
如果对其进行索引,则可以对cates字段执行数据存储区查询.但是,每个实体都有5000个索引的限制.您将使用一个用户属性,因此在这种情况下,您的cates列表将限制为有5000个条目.我之前没有打过这个,所以我不知道它会如何失败,我认为你在编写实体时会遇到异常.
更昂贵的选择是使用中间映射实体.这为您创建/查询映射实体的额外费用提供了无限的关系.
class UserCateMapping(models.Model)
user = models.ForeignKey(UserProfile)
cate = models.ForeignKey(Cate)
Run Code Online (Sandbox Code Playgroud)
在这种情况下,您需要为每个关系创建一个新实体,并在获取您实际想要使用的实际Cate或UserProfile实体之前查询UserCateMapping实体.它将比第一个选项更昂贵,但你将拥有无限制的映射.
| 归档时间: |
|
| 查看次数: |
894 次 |
| 最近记录: |