我的第一个问题帮了我很多,所以我想我会继续问第二个问题。
我目前的(实践)项目是创建一个通用模型。这是我到目前为止所写的内容:
from django.db import models
from django.contrib.auth.models import User
# Create your models here.
class Block(models.Model):
title = models.CharField(man_length=50)
#Make sure child classes have content defined!
#content = models.BooleanField(default=False)
owner = models.ForeignKey('User')
access = models.ManytoManyField('User', null=True)
links = models.ManytoManyField('self', null=True)
class Meta:
abstract = True
def __unicode__(self):
return self.title
class Text(Block)
content = models.TextField(max_length=100)
class URL(Block)
content = models.URLField()
class Email(Block)
content = models.EmailField()
请注意我还没有真正测试过这个问题 - 我认为到目前为止我的逻辑还没有发挥作用。
一些目标:
1)所有者指向该区块的创建者。我认为这应该有效。
2)访问应该指向可以编辑块的用户(所有者除外)。我认为这也应该有效。 (当然有适当的观点)
3)链接应该允许块之间的链接 - 所以我可以检索一个块和任何相关的块(如果需要的话,依此类推)
4)内容当然应该是块的内容(我这里有三个示例简单数据类型),理想情况下可以是任意数量的东西(通过抽象基类在这里实现)。
5)对于电子邮件,URL和文本类,我希望能够编写一个(通用的)视图,它从一个url输入中返回三种类型中任意一种的适当块。我认为这可能需要一个自动增量场,以保证三个模型之间的独特价值。老实说,我根本不确定如何做到这一点。
6)当然,理想情况下,如果可能的话,这应该是易于扩展的。
我当然不确定这是否是实现我想要做的最佳方式。接受任何建议,帮助,提示,技巧或坏笑话!
非常感谢你的帮助!
编辑:与第5号相关,我有一个粗略的观点(语法错误),我认为可能会这样做:
def getblock(request, block, no):
data = get_object_or_404(%s,%s) % (block,no)
return render_to_response('single.html',{'data':data})
思想?
答案 0 :(得分:2)
您的代码对我来说似乎是正确的。我还为我的项目开发了一个泛型类,它与此类似。一句话,当你得到一个块时,你应该做一些类型检查来检索类数据,所以,我建议你添加一个字段来存储它的类型。 e.g:
class Block(models.Model):
title = models.CharField(max_length=50)
type = models.IntegerField()# 1 for text, 2 for email and 3 for url
#Make sure child classes have content defined!
#content = models.BooleanField(default=False)
owner = models.ForeignKey('User')
access = models.ManytoManyField('User', null=True)
links = models.ManytoManyField('self', null=True)
然后在你看来:
def getblock(request, block, no):
if block.type == 1:
data = get_object_or_404(Block,id=no).text
elif block.type == 2:
data = get_object_or_404(Block,id=no).email
elif block.type == 3:
data = get_object_or_404(Block,id=no).url
return render_to_response('single.html',{'data':data})
您可以使用该子类的小写表示来访问子类。我认为这将很好地工作。另外,我没有得到您编写的字典类型参数,并且在执行时出现语法错误。无论如何,我也纠正了一些语法错误。