在django建立一个奇怪的模型?

在django建立一个奇怪的模型?,django,model,Django,Model,这可能很难解释。 我对django和模型的整个概念有点陌生 假设我正在制作一个文章应用程序,其中每篇文章都有一个创建者,但其他用户可以随意编辑文章。我对如何创建这个模型有点困难 首先,, 我使用以下内容扩展用户配置文件: class UserProfile(models.Model): #Required field: user = models.OneToOneField(User) #Other Fields: headline = models.CharF

这可能很难解释。 我对django和模型的整个概念有点陌生

假设我正在制作一个文章应用程序,其中每篇文章都有一个创建者,但其他用户可以随意编辑文章。我对如何创建这个模型有点困难

首先,, 我使用以下内容扩展用户配置文件:

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

    #Other Fields:
    headline = models.CharField()
    industry = models.CharField()
    article= models.ForeignKey(articleModel.article)
这是我感到困惑的第一个地方,我是否将foreignkey字段放在用户模型中?我之所以把它放在这里,是因为每篇文章都可以有许多编辑

下面是我的文章模型:

class article(models.Model):
    #primary key is already true
    creator = models.ForeignKey(userModel.UserProfile)
    title = models.CharField()
    text = models.TextField()
在这里,我放置了ForeignKey字段,这样它就可以与创建者联系起来,因为每篇文章都有一个创建者。(作为旁注,我确实希望一篇文章可以有多个创建者,但我不知道在这种情况下该怎么做)。 我发现UserProfile模型引用文章模型有点奇怪,而文章又引用了它。有人能帮我解开脑袋吗

多谢各位。 :)

这里没有什么“奇怪”。这不是django问题,而是数据库结构问题。您需要阅读表之间的1到1、1到n和n到n关系


你真的需要记录一篇文章的所有编辑吗?一篇文章有许多编辑器,用户可以编辑许多文章,因此这是一种多对多关系

最后一个编辑器的文章模型中的另一个字段可能会为您提供所需的信息

lastEditor=models.ForeignKey(userModel.UserProfile)

如果你真的想保留所有的编辑器,你需要实现另一个模型,它记录一些东西,比如:文章id、编辑器和编辑时间(如果你对更改感兴趣,甚至可能是文章文本)。然后,您可以根据当前文章查询此medel,以获得所有编辑器的列表

您可以对:article\u id和creator执行相同的操作,以获取文章的创建者列表(这将替换UserProfile类中的article字段)

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
如果要跟踪编辑,请考虑使用django版本

类文章(VersionedModel)


编辑:实际上是用户的子类

Ya,我想我应该读一下。我在哪里定义多对多字段重要吗?我只是想用多对多字段替换userProfile中的“article”属性。另外,如果我仍然想跟踪创建者,那么设置“creator”属性的方式是否正确?就像我计划跟踪创建者和编辑一样,
creator
属性是正确的,因为这是一种多对一的关系。定义多对多字段的位置并不重要。那真的很有帮助。为了确保,我不需要UserProfile中的一对一字段?因为我在看django关于扩展用户模型的教程,他们证明了这是必要的。是的,使用user作为主键更有意义。再次非常感谢你。