1

我是一个完整的 Python/Django 初学者,正在尝试向收件人撰写直接消息。

我目前为每个用户配置文件都有一个页面,其中包含指向“发送​​消息!”的链接。在他们的页面上。理想情况下,一旦单击此链接,您就可以向该特定配置文件撰写消息。我在让 Django 知道消息将被发送到该特定配置文件时遇到问题。

到目前为止,这是我的代码:

模型.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',]

视图.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))

表格.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 %}

网址.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'),

当我运行我的代码时,我收到以下错误:

无法分配“(配置文件:johndoe,False)”:“PDirectMessage.receiver”必须是“用户”实例。

有人会指出我的代码有任何明显的问题,这些问题不允许我向预期的人发送消息吗?

4

0 回答 0