我一直在使用Django 2.0.6和python 3.5建立一个婚礼网站。 我在允许用户更改其RSVP选择时遇到问题。
到目前为止,保存用户的输入有效。但是,我希望html在用户最初选择某些东西之后显示“ cocktailchangeform”。 cocktailChangeform应该会覆盖用户先前的输入。当我在管理页面下查看“参加”时,有多个“是”和“否”条目。 任何帮助将不胜感激。
models.py
class UserFullName(User):
class Meta:
proxy=True
verbose_name= 'Guest RSVP'
verbose_name_plural = 'Guests RSVPs'
def __str__(self):
return self.get_full_name()
class Guest(models.Model):
user = models.ForeignKey(UserFullName, on_delete='cascade')
cocktail = models.CharField(max_length=20,choices=choice,default='No Response')
views.py
class CocktailView(FormView):
template_name = 'home/rsvp.html'
def post(self, request, pk=None):
if request.method == 'POST':
form = CocktailForm(request.POST)
if form.is_valid():
post = form.save(commit=False)
post.user = request.user
post.save()
form = CocktailForm()
return redirect('/home')
else:
form = CocktailForm()
return redirect('/home')
args = {'form':form}
return render(request, self.template_name, args)
class UpdateCocktail(FormView):
template_name = 'home/rsvp.html'
def post(self, request):
if request.method == 'POST':
form = CocktailChangeForm(request.POST, instance=request.user)
if form.is_valid():
form.save()
return redirect('/home')
else:
form = CocktailChangeForm(instance=request.user)
return redirect('/home')
args = {'form':form}
return render(request, self.template_name, args)
forms.py
class CocktailForm(forms.ModelForm):
cocktails = forms.MultipleChoiceField(
widget=forms.CheckboxSelectMultiple,
choices=choice,
required=True,
initial='No Response',
error_messages={'Required':'Please Select One'},
)
class Meta:
model = Guest
fields = ('cocktail',)
class CocktailChangeForm(CocktailForm):
class Meta:
model = Guest
fields = ('cocktail',)
def __init__(self, *args, **kwargs):
super(CocktailForm, self).__init__(*args, **kwargs)
f = self.fields.get('cocktail', None)
if f is not None:
f.queryset = f.queryset.select_related('content_type')
rsvp.html
{% if user.is_authenticated %}
<p>Will you be attending the Thursday evening Cocktail Party?</p><br>
{% if cocktailform.cocktail is None %}
<form action="/home/rsvp1/" method="post">
{% csrf_token %}
{{ cocktailform }}
<button type="submit">Submit</button>
</form>
{% else %}
<form action="/home/rsvp1/update/" method="post">
{% csrf_token %}
{{ cocktailchangeform }}
<button type="submit">Update</button>
</form>
{% endif %}
{% else %}
<h3>You must be logged in to RSVP</h3>
{% endif %}
答案 0 :(得分:0)
我知道了。刚刚删除了鸡尾酒更新表单和更新视图。我创建了一个视图,该视图确定用户是已创建要编辑的对象还是必须创建一个新的对象。
class CocktailView(FormView):
template_name = 'home/rsvp.html'
def post(self, request):
if request.method == 'POST':
if len(Guest.objects.filter(user=request.user)) == 0:
form = CocktailForm(request.POST)
if form.is_valid():
post = form.save(commit=False)
post.user = request.user
post.save()
return redirect('/home')
else:
guest = Guest.objects.get(user=request.user)
form = CocktailForm(data=request.POST, instance=guest)
if form.is_valid():
post = form.save(commit=False)
post.save()
return redirect('/home')
args = {'form':form}
return render(request, self.template_name, args)