在我的网络应用中,我在Category
和User
之间存在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()
有人能告诉我是否有办法解决这个问题?
答案 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。