2015-02-11 2 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

Да, хороший вопрос. Я также попытался установить значение по умолчанию для столбца. но не работал для меня .. –

+0

после вашего редактирования; что не работает? пользователь все еще не настроен? –

+0

Привет, @ warath-coder Что мне делать? –

ответ

1

Вы не можете просто настройками по умолчанию для текущего пользователя, потому что Джанго ORM обычно не знает о системе аутентификации Django. Вы должны либо:

1) Пропустите request.user при создании экземпляра модели, как:

invitation = Invitation(from_user=request.user) 

или

2) Используйте промежуточное программное обеспечение, которое добавляет текущего пользователя в модели каждый раз, когда это сохранены. Вы можете попробовать один из этих пакетов: https://www.djangopackages.com/grids/g/model-audit/

+0

Привет и спасибо @Selcuk, вы можете объяснить больше, потому что я свеж в изучении Django. Благодарю. –

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}) 

В формах:

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

И в файле шаблона:

Я решил это очень просто! используя:

{{ user.username }}