Настройка странной модели в Django? - PullRequest
0 голосов
/ 23 августа 2011

Это может быть сложно объяснить. Я немного новичок в Django и в целом о моделях.

Допустим, я создаю приложение для статьи, в котором у каждой статьи есть создатель, но другие пользователи могут редактировать статью по своему усмотрению. У меня возникли сложности с созданием моделей для этого.

Во-первых, Я расширяю профиль пользователя следующим:

class UserProfile(models.Model):
    #Required field:
    user = models.OneToOneField(User)

    #Other Fields:
    headline = models.CharField()
    industry = models.CharField()
    article= models.ForeignKey(articleModel.article)

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

Теперь вот моя модель статьи:

class article(models.Model):
    #primary key is already true
    creator = models.ForeignKey(userModel.UserProfile)
    title = models.CharField()
    text = models.TextField()

Здесь я поместил поле ForeignKey, чтобы оно связывалось с создателем, потому что в каждой статье есть один создатель. (Как примечание, я хочу сделать так, чтобы статья могла иметь несколько авторов, но я не знаю, что делать в этом сценарии). Я нахожу немного странным, что модель UserProfile ссылается на модель статьи, а статья возвращает ее обратно. Может кто-нибудь помочь мне разобрать мой мозг?

Спасибо. :)

Ответы [ 3 ]

1 голос
/ 23 августа 2011

Как можно проще

from django.db.models import *
from django.contrib.admin.models import User

# UserProfile should be provided by django-profiles
class UserProfile(User): # Subclassing user creates an automatic 1-1 called user
    headline = CharField()
    industry = CharField()

class Article(Model):
                              # ALWAYS primary key to User, not UserProfile
    creator =      ForeignKey(User, related_name='articles_created')
    contributors = ManyToManyField(User, related_name='articles_edited')
    created =      DateTime(auto_now_add=True)
    modified =     DateTimeField(auto_now=True)
    title =        CharField()
    text =         TextField()
    class Meta:
        order = ['created', 'title']

забавные вещи:

creator = Article.objects.all()[:1][0].creator.getUserProfile().headline

considder, использующий django-версии, если вы хотите отслеживать изменения.

class Article(VersionedModel)

РЕДАКТИРОВАТЬ: фактически пользователь подкласса

0 голосов
/ 23 августа 2011

Возможно, другое поле в вашей модели статьи для последнего редактора предоставит вам необходимую информацию.

lastEditor = models.ForeignKey(userModel.UserProfile)

Если вы действительно хотите сохранить все редакторы, вам нужно будет внедрить другую модель, которая записывает что-то вроде: article_id, editor и время редактирования (возможно, даже текст статьи, если вас интересуют изменения). Затем вы можете запросить этот medel на основе текущей статьи, чтобы получить список всех редакторов.

вы можете сделать то же самое с: article_id и creator, чтобы получить список создателей статьи (это заменит поле article в вашем классе UserProfile)

0 голосов
/ 23 августа 2011

Здесь нет ничего "странного". Это не такая проблема Django, как проблема структуры базы данных. Вам нужно прочитать отношения 1 к 1, 1 к n и n к n между таблицами.

Вам действительно нужно записать всех редакторов статьи? У статьи есть много редакторов, и пользователь может редактировать много статей, так что это отношение многих ко многим. Вот как это сделать в django .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...