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 次  |  
        
|   最近记录:  |