Как связать Direct Messaging с получателем?
Я начинающий Python/Django, пытаюсь составить прямое сообщение для получателя.
В настоящее время у меня есть страница для каждого профиля пользователя со ссылкой "Отправить сообщение!" на их странице. В идеале, нажав эту ссылку, вы сможете составить сообщение для этого конкретного профиля. У меня возникли проблемы с уведомлением Django о том, что сообщение должно быть отправлено в этот конкретный профиль.
Вот мой код до сих пор:
Models.py
class Profile(models.Model):
user = models.OneToOneField(User)
phone = models.CharField( max_length = 135, null=True, blank=True)
email = models.CharField( max_length = 135, null=True, blank=True)
location = models.CharField(max_length=120, null=True, blank=True)
picture = models.ImageField(upload_to=upload_location, null=True, blank=True)
def __unicode__(self): #__str__(self):
return self.user.username
def get_absolute_url(self):
url = reverse("profile", kwargs={"username": self.user.username})
return url
class PDirectMessageManager(models.Manager):
def get_num_unread_messages(self, user):
return super(PDirectMessageManager, self).filter(read=False).filter(receiver=user).count()
class PDirectMessage(models.Model):
subject = models.CharField(max_length=150)
body = models.CharField(max_length=3000)
sender = models.ForeignKey(User, related_name='sent_pdirect_messages', null=True, blank=True)
receiver = models.ForeignKey(User, related_name='received_pdirect_messages', null=True, blank=True)
sent = models.DateTimeField(auto_now_add=False, auto_now=False, null=True, blank=True)
def __unicode__(self):
return self.subject
objects = PDirectMessageManager()
class Meta:
ordering = ['-sent',]
Views.py
def pcompose(request, username):
title = "<h1>PCompose</h1>"
form = PComposeForm(request.POST or None)
if form.is_valid():
send_message = form.save(commit=False)
user = get_object_or_404(User, username=username)
send_message.sender = request.user
send_message.receiver = Profile.objects.get_or_create(user=user)
send_message.sent = datetime.datetime.now()
send_message.save()
messages.success(request, 'Message Sent!')
return HttpResponseRedirect(reverse('sent'))
return render_to_response('profiles/pcompose.html', locals(), context_instance=RequestContext(request))
forms.py
class PComposeForm(forms.ModelForm):
class Meta:
model = PDirectMessage
fields = ('receiver','subject', 'body',)
widgets = {
'body': Textarea(attrs={'cols': 80, 'rows': 20}),
}
pcompose.html
{% extends 'base.html' %}
<title>{% block head_title %}Compose{% endblock %}</title>
{% block content %}
{{ title|safe }}
<form action='' method='POST'> {% csrf_token %}
{{ form.as_p }}
<input class="btn-success" type="submit">
</form>
{% endblock %}
urls.py
url(r'^profile/(?P<username>[\w.@+-]+)/$', 'profiles.views.profile_view', name='profile'),
url(r'^profile/(?P<username>[\w.@+-]+)/pcompose/$', 'profiles.views.pcompose', name='pcompose'),
Когда я запускаю свой код, я получаю следующую ошибку:
Невозможно назначить "(Profile: johndoe, False)": "PDirectMessage.receiver" должен быть экземпляром "User".
Кто-нибудь укажет на какие-то очевидные проблемы с моим кодом, которые не позволят мне написать сообщение предполагаемому человеку?