2011-09-27 3 views
1

Я новичок в дизайне базы данных, но хотел бы создать три таблицы «Пользователь» и «Обзор» и «Тема» для базы данных в django.дизайн базы данных для пользователя/рецензента в базе данных django

Я попытаюсь объяснить это подробно здесь:

Для меня, например, пользователей, Тема и обзор моделей в models.py. один пользователь может написать только один отзыв для одной темы от других пользователей.

скажем: Майк, Джон, Питер - это три пользователя.

Майк опубликовал тему «Привет мир». Джон может написать только один обзор по теме «Hello World», Питер также может написать один отзыв для него. Джон и Питер не могут опубликовать другой обзор по той же теме (они могут только изменить его). Если Майк опубликует еще одну тему, Джон и Питер могут опубликовать еще один отзыв для новой темы. то же правило применяется к другим пользователям.

пожалуйста, если бы вы могли, не могли бы вы предоставить пример кода для этой проблемы? большое спасибо.

ответ

1

Если вы пытаетесь выяснить, как настроить свои модели.py, зайдите в документацию django и посмотрите на запись своего первого приложения (https://docs.djangoproject.com/en/dev/intro/tutorial01 /). Это от начала до конца написания вашего первого приложения, и вы узнаете, как работает система.

Если вам нужна более подробная информация о парадигме вашего дела, вот что я буду делать. Я бы, вероятно, справился с этим в представлении/шаблоне и отправил/отредактировал обзор с вызовами Dajaxice в базу данных. Если обзор текущего пользователя существует, он покажет данные, если он не будет пустой записью, которая будет использовать Dajax для отправки контента. В методе python, который вызывает Dajax, вы попытаетесь найти обзор, и если он существует при попытке добавить новый, что-то пошло не так, и вы можете справиться с этой ошибкой, иначе он будет сохранен для всех, чтобы видеть.

Например, в 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 %} 
+0

спасибо вам Furbeenator, это точно что я хочу, спасибо много снова. – triston

+0

Рад помочь. Я сделал один boo-boo в исходном сообщении, в GetDetails() я забыл объявить объект post перед установкой post.topic. Я обновил, чтобы сделать класс (верхний P) пост и объявить post = Post() до post.topic = t. – Furbeenator

Смежные вопросы