繁体   English   中英

如何将当前登录的用户默认传递给表单

[英]How to pass the currently logged in user as default to a form

如何将当前登录的用户作为默认值传递给表单?

我希望表单被当前用户预先填充,但同时允许用户对其进行更改(例如,为另一个用户添加客户)。

这是我的模型:

class Customer (models.Model):

    shortname = models.CharField(max_length=30)
    name = models.CharField(max_length=50, blank=True)
    [...]
    user = models.ForeignKey(User)
    nextstep = models.DateField(auto_now=False, auto_now_add=False, default=(date.today() + timedelta(days=10)))

    def due_in(self):

        due_time = self.nextstep - date.today()
        overdue = due_time.days < 0
        return {'days': abs(due_time.days), 'overdue': overdue}

    def get_absolute_url(self):
        """Absolute URL des Partners"""
        return reverse('kundencenter:partner_detail', kwargs={'pk': self.pk}, current_app='kundencenter')

和我的形式:

class CustomerForm(forms.ModelForm):

    class Meta:
        model = Customer
        fields = [
            "shortname",
            "name",
            [...]
            "user",
        ]

        labels = {
            "shortname": 'Customer Shortname',
            "name": 'Full Name',
            }

我的看法是:

class CustomerCreateView(SuccessMessageMixin, CreateView):
    """Adds a new customer."""
    model = Customer
    template_name = 'customercenter/generic_new.html'
    form_class = CustomerForm
    success_message = "Customer %(name)s added."

您可以在呈现表单时在表单中使用Initial。

form = CustomerForm(initial={'user':request.user})

有关更多详细信息,请参阅文档

扩展Arpit Solanki的答案,您可以添加/覆盖get_initial方法,因为您使用的是基于类的视图:

def get_initial(self):
    initial_data = super(CustomerCreateView, self).get_initial()
    initial_data.update({'user':self.request.user})
    return initial_data

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM