首页 > 解决方案 > 如何在 django 中保存模型时自动保存用户名而不是对象名(无)

问题描述

检查更新的图片

当我保存模型时,对象名称为无,但我需要在保存模型时自动保存用户名而不是对象名称(无)

这是管理网站的图片

模型.py

class solo_21_6_2021(models.Model):
    user = models.OneToOneField(User,null=True,on_delete=models.CASCADE)
    player1_pubg_id = models.PositiveIntegerField(null=True,blank=True)
    player1_pubg_name = models.CharField(max_length=15,null=True,blank=True)
 

    def __str__(self):
        return str(self.user)

视图.py

def solo(request):
   form = SoloForm()
   if request.method=="POST":
      form=SoloForm(request.POST)
      if form.is_valid():
          form.save()

   return render(request, 'bgmiapp/solo.html',{'form':form})

表格.py

    class SoloForm(forms.ModelForm):
         class Meta():
            model = solo_21_6_2021
            fields=['player1_pubg_id','player1_pubg_name'

管理员.py

    class SoloAdmin(admin.ModelAdmin):
        list = ('user','player1_pubg_id','player1_pubg_name')


    admin.site.register(Profile)
    admin.site.register(solo_21_6_2021,SoloAdmin)

标签: pythondjangodatabasedjango-modelsadmin

解决方案


您已将用户字段设置为 null,因此在没有它的情况下创建模型,因此当您想按用户显示对象时,它没有此信息,因此显示为无。

将模型修改为:

class solo_21_6_2021(models.Model):
  user = models.OneToOneField(User,on_delete=models.CASCADE)
  player1_pubg_id = models.PositiveIntegerField(null=True,blank=True)
  player1_pubg_name = models.CharField(max_length=15,null=True,blank=True)

  def __str__(self):
      return str(self.user)

所以现在它是必需的和相关的,因为它应该是

和形式:

class SoloForm(forms.ModelForm):
    class Meta():
        model = solo_21_6_2021
        fields=['user','player1_pubg_id','player1_pubg_name']

所以它以 html 形式显示用户的选择

现在,当您提交表单时,用户名将显示在管理页面中

*或者,您可以让经过身份验证的用户成为创建对象的用户,因此无需向所有人显示您的用户列表:

def solo(request):
    form = SoloForm()
    if request.method=="POST":
        form=SoloForm(request.POST)
        if form.is_valid():
            f = form.save(commit=False)
            f.user = request.user
            f.save()

return render(request, 'bgmiapp/solo.html',{'form':form})

并摆脱表单中的用户:

class SoloForm(forms.ModelForm):
    class Meta():
        model = solo_21_6_2021
        fields=['player1_pubg_id','player1_pubg_name']

ps:由于你有OnetoOne关系,所以用户只能创建一个对象,创建另一个会抛出user_id唯一约束错误


推荐阅读