Django 防止项目的创建者成为项目的成员
在我正在开发的应用程序中创建项目时,可以选择哪些用户应成为项目的成员。但是,我不希望项目的创建者(管理员)出现在您可以选择成为成员的用户列表中 你要么是管理员,要么是会员,而不是两者都是。当然,不添加一个self作为成员是可能的,但我甚至不希望它成为可能 这怎么可能呢 查看:Django 防止项目的创建者成为项目的成员,django,django-models,django-forms,django-views,Django,Django Models,Django Forms,Django Views,在我正在开发的应用程序中创建项目时,可以选择哪些用户应成为项目的成员。但是,我不希望项目的创建者(管理员)出现在您可以选择成为成员的用户列表中 你要么是管理员,要么是会员,而不是两者都是。当然,不添加一个self作为成员是可能的,但我甚至不希望它成为可能 这怎么可能呢 查看: def project_add(request): if request.method == "POST": form = ProjectForm(request.POST) if form.is_vali
def project_add(request):
if request.method == "POST":
form = ProjectForm(request.POST)
if form.is_valid():
form.instance.date_added = datetime.date.today()
form.instance.date_updated = datetime.date.today()
form.instance.added_by_user = request.user
form.save()
return redirect(project_list)
else:
form = ProjectForm()
return render(request, 'projects/add.html', {"form" : form})
class Project(models.Model):
...rest of the fields...
added_by_user = models.ForeignKey(User)
users = models.ManyToManyField(User, related_name='projects')
def __unicode__(self):
return self.name
def owned_by_user(self, user):
return self.added_by_user == user
class ProjectForm(ModelForm):
class Meta:
model = Project
exclude = ('date_added', 'date_updated', 'added_by_user')
项目模型:
def project_add(request):
if request.method == "POST":
form = ProjectForm(request.POST)
if form.is_valid():
form.instance.date_added = datetime.date.today()
form.instance.date_updated = datetime.date.today()
form.instance.added_by_user = request.user
form.save()
return redirect(project_list)
else:
form = ProjectForm()
return render(request, 'projects/add.html', {"form" : form})
class Project(models.Model):
...rest of the fields...
added_by_user = models.ForeignKey(User)
users = models.ManyToManyField(User, related_name='projects')
def __unicode__(self):
return self.name
def owned_by_user(self, user):
return self.added_by_user == user
class ProjectForm(ModelForm):
class Meta:
model = Project
exclude = ('date_added', 'date_updated', 'added_by_user')
表格:
def project_add(request):
if request.method == "POST":
form = ProjectForm(request.POST)
if form.is_valid():
form.instance.date_added = datetime.date.today()
form.instance.date_updated = datetime.date.today()
form.instance.added_by_user = request.user
form.save()
return redirect(project_list)
else:
form = ProjectForm()
return render(request, 'projects/add.html', {"form" : form})
class Project(models.Model):
...rest of the fields...
added_by_user = models.ForeignKey(User)
users = models.ManyToManyField(User, related_name='projects')
def __unicode__(self):
return self.name
def owned_by_user(self, user):
return self.added_by_user == user
class ProjectForm(ModelForm):
class Meta:
model = Project
exclude = ('date_added', 'date_updated', 'added_by_user')
为了更清楚,我在下面提供了一张图片。我不希望“Nisse”可以在下面的“Users:”下选择(这是项目的成员),因为Nisse是创建项目的用户
试试这个:
class ProjectForm(ModelForm):
...
users = forms.ModelMultipleChoiceField(queryset=User.objects.all())
# change the queryset for the modelform `users` field to exclude `instance.added_by_user`
def __init__(self, *args, **kwargs):
super(ProjectForm, self).__init__(self, *args, **kwargs)
if self.instance:
self.fields['users'].queryset = self.fields['users'].queryset.exclude(self.instance.added_by_user)
# custom clean method to not allow the `added_by_user`
def clean(self):
cleaned_data = super(ProjectForm, self).clean()
if self.instance.added_by_user in cleaned_data.get('users'):
raise ValidationError("OH NOES")
return cleaned_data
你可能需要稍微按摩一下。它未经测试,但你明白了
您如何添加
项目的可能重复。用户
?只需使用如下内容防止用户添加的添加到用户中:如果项目.owned\u由用户(request.user)拥有:返回“您不能将自己作为用户添加到您拥有的项目”;else:users=request.user
@Hedde:No,这绝对不是重复的,因为它与此问题无关。@danhoert:该解决方案仍然可以在模板的用户列表中选择用户,对吗?是否可以在没有项目创建者的情况下从一开始渲染选择框?渲染哪个选择框?您在这里没有提供太多信息。谢谢您的回答。我需要进口什么东西吗?我得到了“异常类型:DoesNotExist”…您可能需要django.contrib.auth.models.User
和django.core.exceptions.ValidationError
和django.forms
在没有更多堆栈跟踪的情况下无法确定错误是什么。