gpt4 book ai didi

python - Django 中的广义模型

转载 作者:行者123 更新时间:2023-12-01 15:17:46 24 4
gpt4 key购买 nike

我的第一个问题对我帮助很大,所以我想我会继续问第二个问题。

我当前的(实践)项目是创建一个通用模型。这是我到目前为止所写的内容:

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) owner 指向区 block 的创建者。我认为这应该有效。

2) 访问权限应该指向可以编辑区 block 的用户(所有者除外)。我认为这也应该有效。 (当然有正确的观点)

3) 链接应该允许 block 之间的链接——这样我就可以检索一个 block 和任何相关的 block (如果需要的话,依此类推)

4) 内容当然应该是 block 的内容(我这里有三个示例简单数据类型),理想情况下可以是任意数量的东西(这里通过抽象基类实现)。

5) 对于电子邮件、URL 和文本类,我希望能够编写一个(通用的) View ,该 View 从一个 url 输入返回三种类型中任何一种的适当 block 。我认为这可能需要一个自动递增字段来保证三个模型之间的唯一值。老实说,我完全不知道该怎么做。

6) 当然,理想情况下,如果可能的话,这应该很容易扩展。

我当然非常不确定这是否是实现我想要做的事情的最佳方式。接受任何建议、帮助、提示、技巧或恶作剧!

非常感谢您的帮助!

编辑:关于数字 5,我有一个粗略的看法(有语法错误),我认为可能会成功:

def getblock(request, block, no):
data = get_object_or_404(%s,%s) % (block,no)
return render_to_response('single.html',{'data':data})

想法?

最佳答案

你的代码对我来说似乎是正确的。我还为我的项目开发了一个通用类,它与这个类似。有一点,当你得到一个 block 时,你应该做一些类型检查来检索类数据,所以我建议你添加一个字段来存储它的类型。例如:

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})

您可以使用该子类的小写表示访问子类。我认为这会很好地工作。此外,我没有得到您编写的字典类型参数,并且在我执行时出现语法错误。不管怎样,我也纠正了一些语法错误。

关于python - Django 中的广义模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6080500/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com