Как сохранить атрибут моего ForeignKey? - PullRequest
1 голос
/ 25 июня 2019

Я пытаюсь создать представление, позволяющее пользователям загружать свои документы в моей модели уроков. Однако, когда документы загружены, я не могу сохранить экземпляр, в котором отправляется форма. Когда я захожу на страницу администратора, поле для ForeignKey остается пустым.

Это views.py для пользователей, чтобы представить свои документы:

class UploadLessonView(CreateView):
model = Lesson
fields = ['title', 'file']  
template_name = 'store/upload_lesson.html'
success_url = '../'

def form_valid(self, form):
    form.instance.author = self.request.user
    return super(UploadLessonView, self).form_valid(form)

Это models.py для моей детской модели:

class Lesson(models.Model):
title = models.CharField(max_length=100)
file = models.FileField(upload_to="lesson/pdf")
date_posted = models.DateTimeField(default=timezone.now)
post = models.ForeignKey(Post, on_delete=models.CASCADE, null=True, blank=True)

def __str__(self):
    return self.title

def get_absolute_url(self):
    return reverse('lesson_upload', kwargs={'pk': self.pk})

Для моей родительской модели:

class Post(models.Model):
title = models.CharField(max_length=100)
image = models.ImageField(default = 'default0.jpg', upload_to='course_image/')
description = models.TextField()
price = models.DecimalField(decimal_places=2, max_digits=6)
date_posted = models.DateTimeField(default=timezone.now)
author = models.ForeignKey(User, on_delete=models.CASCADE)
rating = models.IntegerField(default = 0)

def __str__(self):
    return self.title

def get_absolute_url(self):
    return reverse('post-detail', kwargs={'pk' : self.pk})

При отправке документов поле для сообщения оставляется пустым.

1 Ответ

0 голосов
/ 25 июня 2019

Вы не устанавливаете объект Post в Lesson с помощью View.Таким образом, вы можете исправить это двумя способами.

Один способ, это отправить его через URL, например:

# url
url('lesson/<int:post_id>/create/', UploadLessionView.as_view())

И использовать значение post_id в представлении:

class UploadLessonView(CreateView):
    model = Lesson
    fields = ['title', 'file']  
    template_name = 'store/upload_lesson.html'
    success_url = '../'

    def form_valid(self, form):
        form.instance.post = get_object_or_404(Post, pk=self.kwargs.get('post_id'))
        return super(UploadLessonView, self).form_valid(form)

Два , вы можете добавить post в полях:

class UploadLessonView(CreateView):
    model = Lesson
    fields = ['title', 'file', 'post']  # <-- Here
    template_name = 'store/upload_lesson.html'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...