Рассмотрим, есть ли у нас форма, которая содержит поле для загрузки файла пользователями, подобными этому:
class PoscastForm(forms.ModelForm):
class Meta:
fields = ("title", "message", "channel", "file", "tag")
model = models.Podcast
def __ini__(self, *args, **kwargs):
user = kwargs.pop("user", None)
super().__init__(*args, **kwargs)
if user is not None:
self.fields["channel"].queryset = (
models.Channel.objects.filter(
pk__in = user.channels.value_list('channel__pk')
)
)
И модель подкаста:
class Podcast(models.Model):
title = models.CharField(max_length=255, default='')
user = models.ForeignKey(User, related_name="podcasts",
on_delete=models.CASCADE, unique=False)
created_at = models.DateTimeField(auto_now=True)
channel = models.ForeignKey(Channel, related_name="podcasts",
null=True, blank=True,
on_delete=models.CASCADE)
message = models.TextField(blank=True, null=True)
message_html = models.TextField(editable=False)
tag = models.ForeignKey('podcasts.Tag', related_name="podcasts",
null=True, blank=True, on_delete=models.CASCADE)
file = models.FileField(blank=True, null=True, default='')
Так, когда пользователь загружаетего прикрепленный файл он сохранит в корневой директории моего проекта!Как я могу изменить направление пути?Вид этой формы выглядит следующим образом:
class CreatePodcast(LoginRequiredMixin, SelectRelatedMixin,
generic.CreateView):
fields = ("title", "message", "channel", "file", "tag")
model = models.Podcast
def form_valid(self, form):
self.object = form.save(commit=False)
self.object.user = self.request.user
self.object.save()
return super().form_valid(form)