django数据库模型中用户/审阅者的数据库设计

时间:2011-09-27 21:09:47

标签: database django

我是数据库设计的新手,但我想为django中的数据库创建三个表“User”,“Review”和“Topic”。

我将在这里详细解释:

例如,我在models.py中有User,Topic和Review模型。一个用户只能为其他用户的一个主题撰写一篇评论。

让我们说:迈克,约翰,彼得是三个用户。

迈克发布了“Hello World”主题。 John只能为“Hello World”主题撰写一篇评论,Peter也可以为同一篇文章撰写一篇评论。约翰和彼得不能为同一主题发布另一篇评论(他们只能修改它)。如果迈克发表另一个话题,约翰和彼得可以发布另一个新主题的评论。同样的规则适用于其他用户。

如果可以的话,请您提供一些此问题的示例代码?非常感谢。

1 个答案:

答案 0 :(得分:1)

如果您正在尝试弄清楚如何设置models.py,请访问django文档,然后查看编写您的第一个应用程序(https://docs.djangoproject.com/en/dev/intro/tutorial01/ )。它从头到尾编写您的第一个应用程序,您将了解系统的工作原理。

如果你想要更具体的案例范例,我会做的就是这样。我可能会在视图/模板中处理这个问题,并使用Dajaxice调用数据库来提交/编辑评论。如果当前用户的评论存在,它将显示数据,如果不存在,则它将是将使用Dajax提交内容的空白条目。在Dajax调用的python方法中,您将尝试查找评论,如果在尝试添加新评论时存在,则出现问题并且您可以处理错误,否则将保存以供所有人查看。

例如,在models.py中:

class User(models.Model):
    name = models.CharField(max_length=128)
    def __unicode__(self):
        return self.name

class Review(models.Model):
    title = models.CharField(max_length=64)
    message = models.TextField()
    topic = models.ForeignKey(Topic)
    user = models.ForeignKey(User)
    def __unicode__(self):
        return self.title

class Topic
    title = models.CharField(max_length=64)
    message = models.TextField()
    user = models.ForeignKey()
    def __unicode__(self):
        return self.title
在views.py中

class Post(models.Model): # This is defined a model, but not part of the data layer, it really is view code.
    topic = None
    your_review = None
    other_reviews = None
    def __unicode__(self):
        return ''

def GetDetails(request):
    posts = () # to be returned to and looped by the Template.
    topics = Topic.objects.all().order_by('-posting_date') # posting_date descending.

    for t in topics:
        post = Post()
        post.topic = t
        post.your_review = Review.objects.filter(topic__id=t.id, user__id=<current_user_id>)
        post.other_reviews = Review.objects.filter(topic__id=t.id, ~Q(user__id=<current_user_id>)

        # Append to the posts array.
        posts.append(post)

    return render_to_response('index.htm', {'posts': posts}, context_instance=RequestContext(request))
index.htm中的

{% if posts %}
    {% for p in posts %}
        <div>
            <div class="title">{{ p.topic.title }}</div>
            <div class="message">{{ p.topic.message }}</div>
            <div class="other_reviews">
                {% if p.other_reviews %}
                    {% for r in p.other_reviews %}
                        <div class="review_title">{{ r.title }}</div>
                        <div class="review_message">{{ r.message }}</div>
                    {% endfor %}
                {% endif %}

                <div>
                    <input type="text" value="{% if p.your_review %}{{ p.your_review.title }}{% endif %}">
                </div>
                <div>
                    <textarea>{% if p.your_review %}{{ p.your_review.message }}{% endif %}</textarea>
                </div>
            </div>
        </div>
    {% endfor %}
{% endif %}