因此,我的模型,表单和视图都可以正常工作。查看作品并发送电子邮件作品。 “邮件”已保存,但是我无法保存message_to和message_from。应该保存用户名。我可以保存所有内容,但是不能使用to和from用户名将消息保存到数据库中。我正在尝试在消息中仅包含1个字段。 “内容”。 to和from应该被隐藏并自动填充。我对此表示赞赏。谢谢。
'models.py'
class Message(models.Model):
message_content = models.TextField()
message_to = models.ForeignKey(User, on_delete=models.CASCADE, related_name='message_to')
message_from = models.ForeignKey(User, on_delete=models.CASCADE, related_name='message_from')
date_created = models.DateTimeField(default=timezone.now)
unread = models.BooleanField(default=True)
'forms.py'
class MessageSellerForm(forms.ModelForm):
class Meta:
model = Message
'views.py'
def ad_detail(request, *args, **kwargs):
template_name = 'x_ads/ad_detail.html'
ad = get_object_or_404(Ad, pk=kwargs['pk'])
ad.increment_view_count()
if request.method == 'POST':
message_form = MessageSellerForm(data=request.POST)
message_form.message_from = request.user.username
message_form.message_to = ad.creator.username
if message_form.is_valid():
subject = 'Message about your ad. ' + ad.title
from_email = request.user.email
to_email = ad.creator.email
message = 'You have a message about one of your ads waiting for you!'
send_mail(subject=subject, message=message, from_email=from_email,
recipient_list=[to_email], fail_silently=False)
messages.success(request, your message has been sent.')
message_form.save()
return HttpResponseRedirect(request.path_info)
else:
message_form = MessageSellerForm()
return render(request, template_name, {'ad': ad, 'message_form': message_form})
答案 0 :(得分:0)
我想我知道您正在尝试做什么,但是我认为还有其他方法会更容易一些。
https://docs.djangoproject.com/en/3.0/topics/forms/modelforms/#the-save-method
您可以改为:
# create the django object in memory, but don't save to the database
message = message_form.save(commit=False)
message.message_from = request.user.username
message.message_to = ad.creator.username
# now save it to the database
message.save()
如果您这样做,则不需要进一步分配消息表格:
message_form.message_from = request.user.username
message_form.message_to = ad.creator.username
您可能还需要修改MessageSellerForm
,使其不包含message_from
和message_to
字段,以便验证有效。可以,因为您知道在表单验证之后但保存到数据库之前,将为这些字段分配正确的值。