【问题标题】:Store the current user in a field of a django model将当前用户存储在 django 模型的字段中
【发布时间】:2013-02-25 19:28:53
【问题描述】:

我正在尝试找到存储创建对象的用户的方式,并且我想自动执行此操作。我找到了一些东西,但没有什么对我有用。代码如下:

模型.py:

class Track(models.Model):
    ...
    usuari = models.ForeignKey(User)

Forms.py:

class TrackForm(forms.ModelForm):   
    class Meta:
        model = Track

Views.py

def pujar_track(request):
if request.method=='POST':
    formulari = TrackForm(request.POST, request.FILES)
    if formulari.is_valid():                    
        formulari.save()                    
        return HttpResponseRedirect('/inici')
else:
    formulari = TrackForm()

return render(request,'principal/trackForm.html',
    {'formulari':formulari})

我见过关于 put:

usuari = models.ForeignKey(User, blank=True, editable=False) but

但我不知道什么时候可以在字段中设置用户。

感谢您的建议!

【问题讨论】:

    标签: django django-models django-forms


    【解决方案1】:

    您可以从您的TrackForm 中隐藏usuari,因此用户无法选择它:

    class TrackForm(forms.ModelForm):   
        class Meta:
            model = Track
            exclude = ('usuari',)
    

    然后,将您的 formulari.save() 替换为:

    track = formulari.save(commit=False)
    track.user = request.user
    track.save()
    

    这是一个常见的用例,在 Django docs 中有详细说明。

    【讨论】:

    • 对不起,如果这是一个简单的工作,我真的是 django 的新手......现在我收到以下错误:“usuari_id”列中的空值违反了非空约束。我尝过 usuari = models.ForeignKey(User, null=True) 但发生了同样的事情
    • 这可能意味着request.userNone,即没有用户登录。阅读有关login_required 装饰器的文档。
    • 这不是问题。用户已登录...不过感谢您的帮助!
    猜你喜欢
    • 2014-08-15
    • 1970-01-01
    • 2019-01-01
    • 2010-10-12
    • 2017-11-11
    • 2014-02-13
    • 1970-01-01
    • 2012-06-15
    相关资源
    最近更新 更多