2016-05-24 5 views
1

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

Name:|  | 
E-mail:|  | 
Text: 
________________ 
|    | 
|    | 
|________________| 

Для зарегистрированных пользователей

Text: 
________________ 
|    | 
|    | 
|________________| 

Вот мой код:
models.py

class Comment(models.Model): 
    """ 
    Class for comments 
    """ 
    post = models.ForeignKey(Post, related_name='comments') 
    title = models.CharField(max_length=40) 
    author = models.ForeignKey(User, blank=True, null=True) 
    body = models.TextField() 
    created = models.DateTimeField(auto_now_add=True) 
    updated = models.DateTimeField(auto_now=True) 
    active = models.BooleanField(default=True) 

    class Meta: 
     ordering = ('created',) 

forms.py

class CommentForm(forms.ModelForm): 
    """ 
    Form for adding comments 
    """ 
    class Meta: 
     model = Comment 
     fields = ('title', 'email', 'body') 

Какой самый лучший подход здесь?

Я, хотя и делаю e-mail и имена как blank = True, так и null = True и заполняет их в пользовательском методе сохранения. Добавить в поле зрения if user.is_authenticated и показать поля соответственно, но я не знаю, все ли в порядке. Не могли бы вы порекомендовать мне лучшие практики?

ответ

0

Придумал с этим решением:
в forms.py

def __init__(self, *args, **kwargs): 
     """ 
     Differend fields for auth and non-auth user 
     """ 
     user = kwargs.pop('user', None) 
     super(CommentForm, self).__init__(*args, **kwargs) 
     # if user and user.is_authenticated(): 
     del self.fields['name'] 
     del self.fields['email'] 

в views.py

.... 
    if request.method == 'POST': 
    comment_form = CommentForm(request.POST) 
    if comment_form.is_valid(): 
     new_comment = comment_form.save(commit=False) 
     new_comment.post = post 
     if user.is_authenticated(): 
      new_comment.author = User.objects.get(username=user.username) 
      new_comment.email = User.objects.get(email=user.email) 
     new_comment.save() 
....