gpt4 book ai didi

python - 模型 limit_choices_to= {'user' : user}

转载 作者:太空狗 更新时间:2023-10-29 17:49:29 24 4
gpt4 key购买 nike

我查看了所有文档,还访问了 IRC channel (顺便说一句,这是一个很棒的社区),他们告诉我,不可能在“当前用户”所在的字段中创建模型和限制选择外键。我将尝试用一个例子来解释这一点:

class Project(models.Model):
name = models.CharField(max_length=100)
employees = models.ManyToManyField(Profile, limit_choices_to={'active': '1'})

class TimeWorked(models.Model):
project = models.ForeignKey(Project, limit_choices_to={'user': user})
hours = models.PositiveIntegerField()

当然,该代码不起作用,因为没有“用户”对象,但这是我的想法,我试图将对象“用户”发送到模型,以限制当前用户拥有项目的选择, 我不想看到我不在的项目。

如果你能帮助我或给我任何建议,非常感谢,我不想让你写所有的应用程序,只是提示如何处理。我脑子里想了 2 天,但我想不通:(

更新:解决方案在这里:http://collingrady.wordpress.com/2008/07/24/useful-form-tricks-in-django/request.user 发送到模型。

最佳答案

这种对当前用户的选择限制是一种需要在请求周期中动态发生的验证,而不是在静态模型定义中。

换句话说:在您创建此模型的实例 时,您将处于 View 中,此时您将有权访问当前用户并可以限制选择。

然后你只需要一个自定义的 ModelForm 来传递 request.user 到,看这里的例子: http://collingrady.wordpress.com/2008/07/24/useful-form-tricks-in-django/

from datetime import datetime, timedelta
from django import forms
from mysite.models import Project, TimeWorked

class TimeWorkedForm(forms.ModelForm):
def __init__(self, user, *args, **kwargs):
super(ProjectForm, self).__init__(*args, **kwargs)
self.fields['project'].queryset = Project.objects.filter(user=user)

class Meta:
model = TimeWorked

那么在你看来:

def time_worked(request):
form = TimeWorkedForm(request.user, request.POST or None)
if form.is_valid():
obj = form.save()
# redirect somewhere
return render_to_response('time_worked.html', {'form': form})

关于python - 模型 limit_choices_to= {'user' : user},我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/160009/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com