проектирование базы данных для пользователя / рецензента в модели базы данных django - PullRequest
1 голос
/ 28 сентября 2011

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

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

Например, у меня есть модели User, Topic и Review в models.py. один пользователь может написать только один отзыв на одну тему от других пользователей.

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

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

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

1 Ответ

1 голос
/ 28 сентября 2011

Если вы пытаетесь выяснить, как настроить файл models.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 %}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...