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

Я нашел несколько подходов к этому, но до сих пор ни один из них у меня не работал. Последнее, что я сделал сейчас, - это попытался захватить имя пользователя в представлении с помощью request.user.get_username (), а затем заполнить поле в моей форме этой строкой в ​​качестве начального значения. Как-то это просто не проходит, я всегда получаю сообщение об ошибке "требуется поле" ...

Вот мой blog-create-view.py:

def blog_create_view(request):
    user = request.user.get_username()
    data = {'author': user}
    form = BlogForm(request.POST, data)
    if form.is_valid():
        form.save()
        return HttpResponseRedirect('/blog/blog-create/thanks')
    else:
        print(form.errors)
        form = BlogForm()

    context = {
        'articleform' : form,
    }
    return render(request, "blog-create.html", context)

Это форма:

class BlogForm(forms.ModelForm):
    title   = forms.CharField(label='',
                    widget=forms.TextInput(attrs={"placeholder":"Titelfeld"}))
    text    = forms.CharField(
                        label='',
                        widget=forms.Textarea(
                        )
                    )
    author  = forms.CharField(widget=forms.HiddenInput())

    class Meta:
        model = Article
        fields = [
            'title',
            'text',
        ]

И это модель:

class Article(models.Model):
    title       = models.CharField(blank=False,max_length=1000)
    text        = models.CharField(blank=False, default='Text', max_length=10000)
    datetime    = models.DateTimeField(auto_now=True)
    featured    = models.BooleanField(default='False')
    author      = models.CharField(max_length=1000)

Помощь очень ценится! Я очень расстраиваюсь, пытаясь понять это

0
Nab 18 Апр 2020 в 15:47

1 ответ

Лучший ответ

Если вы хотите добавить имя автора в качестве имени текущего пользователя, вошедшего в систему, вы можете сделать это следующим образом. И удалите автора в форме

if form.is_valid():
        instance = form.save(commit=False)
        instance.author = request.user.username
        instance.save()

При этом будет лучше изменить автора на foreignkey from django.contrib.auth.models import User и назначить его request.user, а не username, чтобы вы могли фильтровать статьи по Article.objects.filter(author=request.user)

0
bmons 18 Апр 2020 в 13:06