2015-02-11 100 views
2

我想创建一个有发送者,接收者和消息的邀请应用程序。 如何将当前登录用户设置为不可变的发件人?如何在Django中为模型设置默认值?

在model.py

class Invitation(models.Model): 
    from_user = models.CharField(max_length=100) 
    to_user = models.ForeignKey(User, related_name="invitations_received") 
    message = models.CharField(max_length=300) 
    timestap = models.DateTimeField(auto_now_add=True) 

    def __str__(self): 
     return "{} to {}: {}".format(self.from_user, self.to_user, self.message) 

在views.py

from django.shortcuts import render, redirect 
from django.contrib.auth.decorators import login_required 
from .models import Game 
from .models import Invitation 
from .forms import InvitationForm 

@login_required 

def new_invitation(request): 
    if request.method == 'POST': 
     form = InvitationForm(data=request.POST, from_user=request.user) 
     if form.is_valid(): 
      form.save() 
      return redirect('profiles_home') 
    else: 
     form = InvitationForm() 
    return render(request, "arosis/new_invitation.html", {'form': form}) 

在forms.py

from django.forms import ModelForm 
from .models import Invitation 
from django.shortcuts import render 




class InvitationForm(ModelForm): 
    class Meta: 
     model = Invitation 
+0

是的,很好的问题。我也尝试设置列的默认值。但没有为我工作.. – 2015-02-11 11:50:45

+0

后编辑;什么不工作?用户仍然没有被设置? – 2015-02-11 13:20:21

+0

嗨,@ warath-coder我该怎么办? – 2015-02-11 13:38:59

回答

1

你不能简单地默认为当前用户,因为Django的ORM通常不知道Django身份验证系统。你应该:

1)通过了request.user在创建模型实例,如:

invitation = Invitation(from_user=request.user) 

2)使用中间件,每个是时候将当前用户模型保存。你可以尝试这些软件包之一:https://www.djangopackages.com/grids/g/model-audit/

+0

嗨和谢谢@Selcuk,你能解释更多,因为我在学习Django方面很新鲜。谢谢。 – 2015-02-11 12:03:44

0

我解决它很容易为自己如下:

在models.py:

class Invitation(models.Model): 
    from_user = models.ForeignKey(User, related_name="invitations_sent") 
    to_user = models.ForeignKey(User, related_name="invitations_received", 
           verbose_name="User to invite", 
           help_text="Please Select the user you want.") 
    message = models.CharField("Optional Message", max_length=300, blank=True, 
           help_text="Adding Friendly Message") 
    timestap = models.DateTimeField(auto_now_add=True) 
    def __str__(self): 
     return "{} to {}: {}".format(self.from_user, self.to_user, self.message) 

在views.py:

def new_invitation(request): 
    if request.method == 'POST': 
     invitation = Invitation(from_user=request.user) 
     form = InvitationForm(data=request.POST, instance=invitation) 
     if form.is_valid(): 
      form.save() 
      return redirect('arosis_invite') 
    else: 
     form = InvitationForm(data=request.POST) 
    return render(request, "arosis/new_invitation.html", {'form': form}) 

在forms.py中:

class InvitationForm(ModelForm): 
    class Meta: 
     model = Invitation 
     exclude = ['from_user'] 

而在模板文件中:

我解决起来真的很简单!通过使用:

{{ user.username }} 
相关问题