【问题标题】:Save form data to database将表单数据保存到数据库
【发布时间】:2019-08-21 09:16:26
【问题描述】:

我是 Django 新手,我真的需要帮助,

我不知道如何将表单数据保存到数据库。我对views.py有问题

我将填写表格的用户ID添加到外键字段中。

如果有任何链接或示例可以帮助我,我很感激你。

# views.py

@login_required(login_url="home")

def melk_new(request):

form = MelkForm()

???    

return render(request, 'melk_new.html',{'form': form})



# models.py

class Melk(models.Model):

category = models.CharField(max_length=50)

city = models.CharField(max_length=100)

person = models.ForeignKey('CustomUser', on\_delete=models.CASCADE)

def \_\_str\_\_(self):
return self.category    

class CustomUser(AbstractUser):

def __str__(self):

return self.email   

---------------------------------------------------------------------------

# forms.py

class MelkForm(forms.ModelForm):

class Meta:

model = Melk

fields = ('category', 'city')    

class CustomUserCreationForm(UserCreationForm):

class Meta(UserCreationForm):

model = CustomUser

fields = ('username', 'email')

【问题讨论】:

  • 您想要做的是删除表单元素(通过制作自定义表单),并始终在保存模型之前将“请求用户”放入值中。调整表单的方式取决于您是针对前端还是后端(django admin)页面...
  • @Tom V 谢谢你的回复。有没有链接或例子,
  • 这里是一个如何“hacky”从表单中删除字段的示例:stackoverflow.com/a/15557335/5229859

标签: django


【解决方案1】:

要获取当前登录的用户,您可以在 request.user 对象中找到它。但在您假设当前有一个登录用户之前,您需要验证这一点,以便您有 2 个广为人知的选项:

  1. request.user.is_authenticated()
  2. @login_required() 装饰器使用from django.contrib.auth.decorators import login_required

    if request.user.is_authenticated():
        Car.objects.create(model_id=some_id, person=request.user)
    

注意:

@login_required()添加在函数上方

【讨论】:

  • 虽然此代码可以解决问题,including an explanation 说明如何以及为什么解决问题将真正有助于提高您的帖子质量,并可能导致更多的赞成票。请记住,您正在为将来的读者回答问题,而不仅仅是现在提出问题的人。请edit您的回答添加解释并说明适用的限制和假设。
  • @double-beep 我编辑了我的答案,抱歉很匆忙
  • 感谢您的回复。我不知道我可以写什么来代替 some_id。 Django 在 some_id 上出错。
【解决方案2】:
@login_required(login_url="home")
 def melk_new(request):
    form = MelkForm(request.POST)
    if form.is_valid():
        instance = form.save(commit=False)
        instance.user_id = request.user.id
        instance.save()
    return render(request,'melk_new.html', { 'form': form})

【讨论】:

    猜你喜欢
    • 2017-03-06
    • 1970-01-01
    • 1970-01-01
    • 2018-06-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-15
    • 1970-01-01
    相关资源
    最近更新 更多