Как связать 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".

Кто-нибудь укажет на какие-то очевидные проблемы с моим кодом, которые не позволят мне написать сообщение предполагаемому человеку?

0 ответов

Другие вопросы по тегам