【问题标题】:How do I link the User model with a Taxonomy model?如何将用户模型与分类模型链接?
【发布时间】:2013-02-15 01:42:14
【问题描述】:

如何将 User 模型与 Taxonomy 模型相关联。如何为特定用户添加术语以及如何检索它们?

我对 Django 很陌生,所以您必须原谅我缺乏知识并且还没有掌握具体的术语。

我有以下模型女巫扩展基本用户:

class UserProfile(models.Model):
    user = models.OneToOneField(User)
    birthday = models.DateField(blank=True)
    about_me = models.TextField(blank=True,null=True)
    avatar = models.ForeignKey(Picture,blank=True, null=True)
    class Meta:
        db_table = 'auth_user_profile'

我还有以下分类模型:

class TaxonomyGroup(models.Model):
    related taxonomy items"""
    name = models.CharField(max_length=25, db_index=True)
    slug = AutoSlugField(populate_from='name', unique = True)

    def __unicode__(self):
        return u'%s' %self.name

    class Meta:
        db_table = 'taxonomies'
        ordering = ['name']

class TaxonomyItem(models.Model):
    taxonomy_group = models.ForeignKey(TaxonomyGroup, db_index=True)
    name = models.CharField(max_length=55, db_index=True)
    slug = AutoSlugField(populate_from='name', unique = True)

    def __unicode__(self):
        return u'%s' %self.name

class TaxonomyMap(models.Model):
    taxonomy_group = models.ForeignKey(TaxonomyGroup, db_index=True)
    taxonomy_item = models.ForeignKey(TaxonomyItem, db_index=True)
    content_type = models.ForeignKey(ContentType, db_index=True)
    object_id = models.PositiveIntegerField()
    content_object = generic.GenericForeignKey('content_type','object_id')

    objects = TaxonomyManager()

    class Meta:
        db_table = 'term2object'
        unique_together = ('taxonomy_item', 'content_type', 'object_id')

【问题讨论】:

  • 在您的分类组模型中创建用户字段
  • 为什么需要TaxonomyItem 模型中的taxonomy_group 字段。这段关系不是已经被TaxonomyMap处理了吗?
  • 我认为你是对的,谢谢!我也会尽快尝试您的解决方案。

标签: django django-models django-users django-contenttypes


【解决方案1】:

在我看来,您希望分类和用户模型之间存在多对多关系,因此您可以将其添加到 UserProfile 模型中。

class UserProfile(models.Model):
    user = models.OneToOneField(User)
    birthday = models.DateField(blank=True)
    about_me = models.TextField(blank=True,null=True)
    avatar = models.ForeignKey(Picture,blank=True, null=True)
    taxonomies = models.ManyToManyField(TaxonomyItem)

然后,当您为特定用户添加条款时,您将执行以下操作:

taxonomy = TaxonomyItem.objects.create(taxonomy_group=<some_group>, name=<some_name>,...)
profile = user.get_profile()
profile.taxonomies.add(taxonomy)

要找回你可以做的

profile.taxonomies.all()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-10-27
    • 2021-11-12
    • 2016-10-05
    • 2021-01-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多