我是数据库设计的新手,但我想为django中的数据库创建三个表“User”,“Review”和“Topic”。
我将在这里详细解释:
例如,我在models.py中有User,Topic和Review模型。一个用户只能为其他用户的一个主题撰写一篇评论。
让我们说:迈克,约翰,彼得是三个用户。
迈克发布了“Hello World”主题。 John只能为“Hello World”主题撰写一篇评论,Peter也可以为同一篇文章撰写一篇评论。约翰和彼得不能为同一主题发布另一篇评论(他们只能修改它)。如果迈克发表另一个话题,约翰和彼得可以发布另一个新主题的评论。同样的规则适用于其他用户。如果可以的话,请您提供一些此问题的示例代码?非常感谢。
答案 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 %}