只让创建者在django中编辑一个类别

时间:2012-10-01 03:36:52

标签: python django m2m

在我的网络应用中,我在CategoryUser之间存在m2m关系

class Category(models.Model):
    users = models.ManyToManyField(User,related_name='category_users')
    title = models.CharField(max_length=200)
    description = models.TextField()

当用户尝试创建类别时,我会这样做

category,created = Category.objects.get_or_create(title__iexact=category_title,defaults={'title':category_title,'description':category_title})

我需要为用户提供Category的编辑页面。我想提供它,只有创建该类别的人才可以编辑说明。 所以,我试图在模型中添加一个创建者字段。

class Category(models.Model):
        users = models.ManyToManyField(User,related_name='category_users')
        title = models.CharField(max_length=200)
        description = models.TextField()
        creator = models.ForeignKey(User,related_name='category_creator')

但是,这会导致IntegrityError运行get_or_create()方法,因为creator_id为空

...
category_title = category_title_form.cleaned_data['title']
category_title = category_title.strip()
if len(category_title)>0:
            category,created = Category.objects.get_or_create(title__iexact=category_title,defaults={'title':category_title,'description':category_title})
            if request.user not in category.users.all():
                category.users.add(request.user)                
                category.save()
            if created:
                category.creator = request.user
            category.save()

有人能告诉我是否有办法解决这个问题?

1 个答案:

答案 0 :(得分:0)

当用户创建类别时,您可以将该类别添加到用户“类别集” -

category, created = user.category_set.get_or_create(
    title__iexact=category_title,
    defaults={'title': category_title, 'description': category_title}
)

通过user.category_set访问类别表,将自动维护user_id字段。

只能通过此调用检索用户的类别,如果它创建了新类别,则会自动设置user_id。