首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >错误:选择一个有效的选择。这种选择不是可用的选择之一。

错误:选择一个有效的选择。这种选择不是可用的选择之一。
EN

Stack Overflow用户
提问于 2020-07-10 05:46:52
回答 1查看 1.3K关注 0票数 0

我正在使用Django创建一个博客。我希望我的作者在作者的盒子里自动被选中。实际上,该框被javascript正确填充,但当我提交表单时,它显示“选择一个有效的选择,该选项不是可用的选项之一。”但我给它提供了一个TextInput字段。当向作者提供Select而不是TextInput时,它工作得很好。但是我不想让作者选择,我希望它被登录的first_name所填充。

当在表单上添加一个新类别时,我希望在不关闭整个服务器的情况下自动更新我的选择列表,然后再次运行。

Forms.py

代码语言:javascript
运行
复制
from django import forms
from .models import Post, Category
from django.contrib.auth.models import User

# choices = [('coding','coding'),('entertainment','entertainment'),('sports','ssports')]
choices = Category.objects.all().values_list('name','name')
choice_list = []

for item in choices:
    choice_list.append(item)

class PostForm(forms.ModelForm):
    class Meta:
        model = Post
        fields = ('title', 'title_tag','author','category', 'body', 'snippet')

        widgets = {
            'title': forms.TextInput(attrs={'class':'form-control'}),
            'title_tag': forms.TextInput(attrs={'class':'form-control'}),
            'author': forms.TextInput(attrs={'class':'form-control', 
                        'id':'gauname','value':'','type':'hidden'}),
            # 'author': forms.Select(attrs={'class':'form-control'}),
            'category': forms.Select(choices=choice_list,attrs={'class':'form-control'}),
            'body': forms.Textarea(attrs={'class':'form-control'}),
            'snippet': forms.Textarea(attrs={'class':'form-control'}),
        }

views.py

代码语言:javascript
运行
复制
class AddCategoryView(CreateView):
    model = Category
    form_class =  AddCategory
    template_name = 'add_category.html'
    # fields = '__all__'

models.py

代码语言:javascript
运行
复制
class Post(models.Model):
    title = models.CharField(max_length=255)
    title_tag = models.CharField(max_length=255)
    author = models.ForeignKey(User, on_delete=models.CASCADE, null=True)
    # body = models.TextField()
    body = RichTextField(blank=True, null=True)
    post_date = models.DateTimeField(default=datetime.now)
    category = models.CharField(max_length=255, default='coding')
    snippet = models.CharField(max_length=255)
    likes = models.ManyToManyField(User, related_name='blog_posts')

    def total_likes(self):
        return self.likes.count()

    def __str__(self):
        return self.title + '|' + str(self.author)

    def get_absolute_url(self):
        # return reverse('article-detail', args=(str(self.id)))
        return reverse('home')

HTML

代码语言:javascript
运行
复制
{% block content %}
{% if user.is_authenticated %}
  <h1>Add Post...</h1>
  <br><br><br>

  <form method="POST">
    <div class="form-group">
      {% csrf_token %}
      {{form.media}}
      {{form.as_p}}
      <!-- <input class = form-control type="text" id="gauname" name="author" value=""> -->
      <button class="btn btn-secondary" name="button">Post</button>
   </div>


  </form>

  <script>
    var name = "{{ request.user.first_name }}";
    document.getElementById("gauname").value = name;

  </script>
{% else %}

You are not allowed here!
{% endif %}


{% end block %}

更新

forms.py

代码语言:javascript
运行
复制
class AddCategory(forms.ModelForm):
        class Meta:
            model = Category
            fields = ('name',)

            widgets = {
                'name': forms.TextInput(attrs={'class':'form-control'}),
            }

            def __init__(self, *args, **kwargs):
                super().__init__(*args, **kwargs)
                self.fields["name"] = forms.ModelChoiceField(
                    queryset=Category.objects.all(),
                )

当在表单上添加一个新类别时,我希望在不关闭整个服务器的情况下自动更新我的选择列表,然后再次运行。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-07-10 05:56:07

如果有两个同名的人,Django怎么知道这里的用户是谁?换句话说,Django如何将名映射到用户?这没有意义

因为它是一个隐藏字段,所以您可以通过request.user.first_name代替request.user.pk (特定用户的唯一ID )。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62828020

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档