【问题标题】:Save user first_name as default value for model django将用户 first_name 保存为模型 django 的默认值
【发布时间】:2020-12-06 07:15:36
【问题描述】:

我有一个带有作者变量的文章模型,我想将其保存为用户的名字和姓氏。我使用名为 Account 的自定义用户模型。

author = models.CharField('author',max_length=50 default=User.first_name)

保存时显示作者是<django.db.models.query_utils.DeferredAttribute object at 0x10b461dc0> 那么如何在保存此表单时检索帐户名:

form = ArticleCreationForm(request.POST) 
        # check if form data is valid 
        if request.method == "POST":
            if form.is_valid(): 
                form.save() 
            # save the form data to model 
    
        context['form']= form 

forms.py:

class ArticleCreationForm(forms.ModelForm): 
    # specify the name of model to use 
    class Meta: 
        model = Article 
        fields = "__all__"
        exclude = ['votes', 'author']

如果你可以让用户看到带有他的名字的作者字段但不能编辑它会很好。

【问题讨论】:

    标签: python django forms


    【解决方案1】:

    你需要在 CharField 中提供一些像这样的默认值。

    author = models.CharField('author',max_length=50, default='First Name')
    

    您可以在保存表单时像这样在作者字段中保存用户(当前用户)的名字。

    if request.method == "POST":      
        form = ArticleCreationForm(request.POST) 
        if form.is_valid(): 
            article = form.save(commit=False) 
            article.author = request.user.first_name # the user must be logged in for this.
            article.save()
            return redirect('some_path')

    【讨论】:

      【解决方案2】:

      您可以使用下面提到的代码来生成作者模型,并根据他们创建的帖子使用它:

      from django.contrib.auth import get_user_model
      User = get_user_model()
      class Author(models.Model):
          user = models.OneToOneField(User, on_delete=models.CASCADE)
          profile_picture = models.ImageField()
      
          def __str__(self):
              return self.user.username
      

      您可以在模型中需要的地方调用此用户/作者:

      author = models.ForeignKey(Author, on_delete=models.CASCADE)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-10-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-05-29
        相关资源
        最近更新 更多