我正在使用Django创建一个博客。我希望我的作者在作者的盒子里自动被选中。实际上,该框被javascript正确填充,但当我提交表单时,它显示“选择一个有效的选择,该选项不是可用的选项之一。”但我给它提供了一个TextInput字段。当向作者提供Select而不是TextInput时,它工作得很好。但是我不想让作者选择,我希望它被登录的first_name所填充。
当在表单上添加一个新类别时,我希望在不关闭整个服务器的情况下自动更新我的选择列表,然后再次运行。
Forms.py
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
class AddCategoryView(CreateView):
model = Category
form_class = AddCategory
template_name = 'add_category.html'
# fields = '__all__'
models.py
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
{% 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
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(),
)
当在表单上添加一个新类别时,我希望在不关闭整个服务器的情况下自动更新我的选择列表,然后再次运行。
发布于 2020-07-10 05:56:07
如果有两个同名的人,Django怎么知道这里的用户是谁?换句话说,Django如何将名映射到用户?这没有意义
因为它是一个隐藏字段,所以您可以通过request.user.first_name
代替request.user.pk
(特定用户的唯一ID )。
https://stackoverflow.com/questions/62828020
复制相似问题