【问题标题】:how to do i automatically set the user field to current user in django modelform如何在 django modelform 中自动将用户字段设置为当前用户
【发布时间】:2017-10-25 19:28:11
【问题描述】:

如何将当前登录用户设置为 django 模型的用户字段。在我看来,我正在使用函数基础视图。我的模型是这样的。 模型.py

class DistributionProfile(Abstract_Class):
      Distributortype =(
                   ('B2B1','b2b'),
                   ('b2c','b2c'),
                   ('c2c','c2c'),
                   ('govt4','govt'), 
                 )
      ManufacturerType=(('Machine1','Machines'),
                  ('Pharmaceutical2','Pharmaceutical'),
                  ('Jewelries3','Jewelries'),
                  ('Furniture4','Funitures'),
                  ('Electronics5','Electronics'),('Textile6','Textile'),
                  ('Constructionmaterials7','ConstructionHardware'),
                  ('Beverages8','Beverages'),
                  ('Cosmetics9','Cosmetics'),
                  ('Convectionaries10','Convectionaries'),
                  ('AgriculturalProduce11','AgriculturalProduce'),
                  ('RawMaterials12','RawMaterials'),
                  ('CrudOil13','CrudOil'),
                  ('SeaFood14','SeaFood'),

                  )
    title =models.CharField(choices=Distributortype ,null=True,max_length=250,blank=False)
    ManufacturerOfInterest =MultiSelectField(choices=ManufacturerType,null=True,blank=False,max_choices=14)
    verified = models.BooleanField(default=False,blank=True)
    promot=models.BooleanField(default=False,blank=False) 
    slug = models.SlugField(default='')

    user=models.ForeignKey(User,null=True,on_delete=models.CASCADE)

下面是我的表单。我希望表单能够自动包含登录用户填写表单的信息。这意味着用户字段应该自动包含用户登录信息。这样我就可以轻松查询和显示对象由登录用户创建 表单.py

class   DistributionProfileForm(forms.ModelForm):
    class Meta:
         model= DistributionProfile


         exclude=  ['slug','user','CreatedTime','verified','promot','UpdatedTime']
         widgets ={
         'CompanyRegisteredName':forms.TextInput(attrs={'class':'distributorform','placeholder':'Name of your company','autofocus':'True'}),
         'CompanyRegisteredState':forms.TextInput(attrs={'class':'distributorform','placeholder':' StateOfRegistry'}),
         'CompanyRegisteredAddress':forms.TextInput(attrs={'class':'distributorform','placeholder':'Company Address'}),
         'CompanyRegisteredCity':forms.TextInput(attrs={'class':'distributorform','placeholder':'Company registered city'}),
         'CompanyWebsiteLink':forms.TextInput(attrs={'class':'distributorform','placeholder':'www.mycompany.com'}),
         'RegisteredCompanyType':forms.Select(attrs={'class':'distributorform '}),
         'Country':forms.Select(attrs={'class':'distributorform'}),
         'ManufacturerOfInterest ':forms.CheckboxSelectMultiple(attrs={'class':'multiple_select'}),


    }
         fields=['CompanyRegisteredName',
            'CompanyRegisteredState',
            'CompanyRegisteredAddress',
            'CompanyRegisteredCity', 
            'CompanyWebsiteLink',
            'RegisteredCompanyType',
            'Country','title',
            'ManufacturerOfInterest'

            ]

view.py

def SetUpDistributor(request):
if not request.user:
    return HttpResponse('login to access this page ')
if request.method =='POST':

    distributor = DistributionProfileForm(request.POST,request.FILES)
    if distributor.is_valid():
        distributor.save(commit=False)
        distributor.user=request.user
        distributor.save()
        messages.success(request,'Distributor profile created ')
        return redirect('gbiz1990:distributor_profile_setup')
    else:
        messages.error(request,'Something went wrong')
else:
    distributor=DistributionProfileForm()
return render(request,"gbiz1990/User_function_pages/distributors.html",{'distributor':distributor})

【问题讨论】:

    标签: django


    【解决方案1】:

    你的观点,可能是这样的:

    def your_view(request):
        form = YourForm(request.POST or None)
    
        if form.is_valid():
            your_object = form.save(commit=False)
            your_object.user = request.user
            your_object.save()
            return redirect('your_success_url')
    
        context = {'form': form}
        return render(request, 'your_template.html', context)
    

    您需要调整某些部分,但总的来说应该是您的观点。需要注意的是,这个视图需要一个login_required 装饰器,以防止非登录用户创建对象。

    【讨论】:

    • 我怎样才能创建我的对象。我尝试了很多例子,但似乎没有一个工作。我对编程很陌生。假设我什么都不知道。请
    • 请更新您的问题并添加您的视图的整个代码。或在此处发送指向要点的链接。
    • 谢谢我已经编辑,并添加了我的完整代码。如果你能帮我解决这个问题
    • 在您看来我没有看到任何错误,错误是什么?
    • 当我签入管理员时,用户字段为空。假设它填充了创建对象的登录用户名。
    【解决方案2】:

    使用request.user。我不知道您的应用程序是如何工作的,但是在创建时,请执行以下操作:

    model = ModelName(user = request.user)
    model.save()
    

    我使用了ModelName,因为最好的做法是以大写开头的类名,这在您的create 模型中没有实现。我建议你改变这个。

    您的观点似乎也有错误,应该是request而不是reques


    你的观点可能是这样的:

    def index(request):
        form = FormName(request.POST or None)
        if form.is_valid():
            form.save()
        return render(request, "path/to/template", {"form": form})
    

    您的模板可能是:

    <form method="POST" action="">
        {{ form }}
        <input type="submit">
    </form>
    

    【讨论】:

    • 抱歉打错了。请详细告诉我如何使用函数基础视图创建视图。我只是希望能够自动让登录用户进入模型的用户字段.
    • 我已经添加了一个例子,但我不知道你的目的是什么或它的目的是什么。
    • 我是 stackoverflow 的新手。我用我的所有代码都问过类似的问题,我很乐意给你贴上标签。这可能吗?
    • 我也在使用django模型表单,登录用户可以在其中输入信息。
    • 请看一下。里面有我的代码。但是还没有人回答。
    【解决方案3】:

    所以我解决了我的问题 在我的 model.py 中

    class SetdistributorProfile(models.Model):
          user=modelss.foreignkey(settings.AUTH_USER_MODEL,null=True,unique=True)
    

    views.py

    def SetDistribution(request):
        if not requested.user.is_authenticated:
        return redirect('app_name:url_name)
        if request.method === 'POST':
           dis = MymodelForm(request.POST or None)
           if dis.is_valid():
           instance=dis.save(commit=False)
           instance.user=request.user
           instance.save()
           return redirect('myappname:urlname')
         else:
            instance=MymodelFomr()
         context={'intance':intance}
         return render(request,'page.hmtl',context)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-06-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-17
      • 2013-08-17
      • 2011-11-10
      相关资源
      最近更新 更多