【问题标题】:Connect the username when sending a report in djangodjango发送报告时连接用户名
【发布时间】:2021-11-25 20:01:40
【问题描述】:

我是 django 的初学者,我正在尝试创建一个站点以在创建配置文件后发送报告,但是当我发送报告时,报告作者的用户名没有保存,只是(无)。查了很多都没找到

models.py

from django.db import models
from django.contrib.auth.models import User


class Profile(models.Model):
    user = models.OneToOneField(User, verbose_name=("user"), null=True, on_delete=models.CASCADE)
    identity_No = models.IntegerField( blank=True, null=True)
    mobile_No = models.IntegerField( blank=True, null=True)
    city = models.CharField( max_length=15,null=True)



class Meta:
    verbose_name =("Profile")
    verbose_name_plural =("Profile")

def __str__(self):
    return '%s' %(self.user)




class Report(models.Model):
    user = models.ForeignKey(User, verbose_name=("user"), on_delete=models.CASCADE)
    Report_type =models.CharField( max_length=100, blank=True, null=True)
    Region =models.CharField( max_length=30, blank=True, null=True)
    city =models.CharField( max_length=30, blank=True, null=True)
    sector =models.CharField( max_length=30, blank=True, null=True)
    report =models.TextField( max_length=3000, blank=True, null=True)
    files =models.FileField( blank=True, null=True)


    class Meta:
        verbose_name =("Report")
        verbose_name_plural =("Report")


    def __str__(self):
        return '%s' %(self.user)

form.py 缩短时间,只附上报告

class ReportForm(forms.ModelForm):


    class Meta:
        model = Report
        fields = ['Report_type', 'Region', 'city','sector','report','files' ]

view.py

def report(requst):
    if requst.method == 'POST':
        report_form = ReportForm(requst.POST)
        if report_form.is_valid() :
            report_form.save()
            return redirect ('accounts:home')
    else:
        report_form = ReportForm()
    return render(requst, 'user/report.html', {
        'report_form': report_form,

enter image description here})

【问题讨论】:

  • 报告的用户是登录的用户吗?
  • 是的,非常感谢

标签: python django django-models django-views django-forms


【解决方案1】:

您可以将 ReportForm 中包含的新报告链接到已登录的用户 request.user:

from django.contrib.auth.decorators import login_required

@login_required
def report(requst):
    if requst.method == 'POST':
        report_form = ReportForm(requst.POST)
        if report_form.is_valid():
            report_form.instance.user = request.user
            report_form.save()
            return redirect ('accounts:home')
    else:
        report_form = ReportForm()
    return render(requst, 'user/report.html', { 'report_form': report_form })

注意:您可以使用 @login_required decorator [Django-doc].

【讨论】:

  • 非常感谢它的工作原理
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-11-04
  • 1970-01-01
  • 2022-07-22
相关资源
最近更新 更多