相关疑难解决方法(0)

使用Django管理站点自动填充created_by字段

我想使用Django管理界面来创建一个非常简单的Web应用程序,但我无法解决一个不应该难以解决的问题.

考虑以下:

class Contact(models.Model):
    name = models.CharField(max_length=250, blank=False)
    created_by = models.ForeignKey(User, blank=False)
Run Code Online (Sandbox Code Playgroud)

我找不到自动填充created_by字段并让Django管理员知道它的方法.我见过的大多数方法都意味着重载了Object的save方法并将其传递给请求用户.它们都需要构建自定义视图和/或表单.

最好在管理站点中创建新联系人的表单不应显示created_by字段(这很容易)并使用当前用户自动填充它(这似乎比它应该更难).

python django django-models django-admin

21
推荐指数
1
解决办法
2万
查看次数

Django在保存视图时设置user_id

我需要在添加视图中设置正在创建帖子的用户:

@login_required 
def add(request):
    if request.method == 'POST':
        form = BusinessForm(request.POST)
        form.user_id = request.user.id
        if form.is_valid():
            form.save()
            return HttpResponseRedirect(reverse('listing.views.detail'), args=(f.id))
    else:
        form = BusinessForm()
    return render_to_response('business/add.html', {'form':form},
        context_instance=RequestContext(request))
Run Code Online (Sandbox Code Playgroud)

我分配了用户ID,form.user_id = request.user.id但在保存时,它仍然给我一个错误Column user_id cannot be null

难道我做错了什么?谢谢

编辑:

我从模型中的表单中排除用户:

class BusinessForm(ModelForm):
    class Meta:
        model = Business
        exclude = ('user',)
Run Code Online (Sandbox Code Playgroud)

这会导致问题吗?我该如何解决这个问题?

编辑2:

按照建议编辑了我的BusinessForm()类但没有工作:

class BusinessForm(ModelForm):
    class Meta:
        model = Business
        exclude = ('user',)
    def __init__(self, *args, **kwargs):
        self.request = kwargs.pop('request', None)
        return super(BusinessForm, self).__init__(*args, **kwargs)

    def save(self, *args, **kwargs): …
Run Code Online (Sandbox Code Playgroud)

django django-forms

4
推荐指数
1
解决办法
2721
查看次数

“User”对象没有属性“get”

我试图ModelForm这里构建一个解决方案,但是我收到此错误:

'User' object has no attribute 'get'
Run Code Online (Sandbox Code Playgroud)

这个想法是构建ModelForm一个表单,提交时登录的用户会更新条目。

models.py 是:

class UserDetailsForm(ModelForm):
    class Meta:
        model = UserProfile
        fields = ['mobile_phone']

    def __init__(self, *args, **kwargs):
        self.request = kwargs.pop('request', None)
        return super(UserDetailsForm, self).__init__(*args, **kwargs)

    def save(self, *args, **kwargs):
        kwargs['commit']=False
        obj = super(UserDetailsForm, self)
        if self.request:
            obj.user = UserProfile.objects.get(user=self.request.user)
        obj.save()
Run Code Online (Sandbox Code Playgroud)

我在 models.py 中的模型是

class UserProfile(models.Model):
    user = models.OneToOneField(User)
    mobile_phone = models.CharField(max_length=30,help_text='Max 30 characters.',blank=True)
    #have shortened this for simplicity
    def __unicode__(self):
        return self.mobile_phone
Run Code Online (Sandbox Code Playgroud)

根据这里的请求,我们从views.py 中回溯了问题:

    userprofile …
Run Code Online (Sandbox Code Playgroud)

python django

4
推荐指数
1
解决办法
2万
查看次数

Django:使用模型保存保存用户ID

我的问题与这个问题非常相似: Django:保存模型时填充用户ID

不幸的是,我不太明白他们的答案.

当用户登录时,我希望他们能够提交链接,并且我有一个user_id外键,我似乎无法填充.

def submit(request):
    if request.method == 'POST':
        form = AddLink(request.POST)
        if form.is_valid():
            form.save()
            return redirect('home')
    else:
        form = AddLink()

    return render_to_response('links/submit.html', {'form': form})
Run Code Online (Sandbox Code Playgroud)

我每次提交表格时都会提到:

null value in column "user_id" violates not-null constraint
Run Code Online (Sandbox Code Playgroud)

我理解但我不知道如何将user_id添加到我的表单对象.如何访问当前登录用户的ID并将其与表单数据一起提交?

django django-models

1
推荐指数
2
解决办法
5161
查看次数

Django中间件'module'对象不可调用

我有中间件的问题我发现了很多关于它的问题,但在我的情况下没有任何帮助.

我使用中间件来获取current_user以在我的模型中使用以在save方法中保存修改后的用户,而无需在视图中写入此内容.

这是原始帖子,代码如下:

中间件

from threading import local

_user = local()


class CurrentUserMiddleware(object):
    def process_request(self, request):
        _user.value = request.user


def get_current_user():
    return _user.value
Run Code Online (Sandbox Code Playgroud)

这段代码有问题,因为我收到的错误如下:

Traceback (most recent call last):
  File "C:\Program Files (x86)\Python35-32\Lib\wsgiref\handlers.py", line 137, in run
    self.result = application(self.environ, self.start_response)
  File "C:\Users\loc\dJangoEnvironment\lib\site-packages\django\contrib\staticfiles\handlers.py", line 63, in __call__
    return self.application(environ, start_response)
  File "C:\Users\loc\dJangoEnvironment\lib\site-packages\django\core\handlers\wsgi.py", line 158, in __call__
    self.load_middleware()
  File "C:\Users\loc\dJangoEnvironment\lib\site-packages\django\core\handlers\base.py", line 53, in load_middleware
    mw_instance = mw_class()
TypeError: 'module' object is not callable
[20/Jul/2016 10:51:44] "GET /panel/ HTTP/1.1" 500 …
Run Code Online (Sandbox Code Playgroud)

python django django-middleware

0
推荐指数
1
解决办法
2451
查看次数