Как заполнить поле user текущим пользователем в django models через формы?
hi я работаю над приложением django. функциональность, которую я реализую, заключается в том, чтобы позволить моему пользователю купить интернет-пакет на сайте.
я реализовал модель, представление, шаблон и url до сих пор. но в форме я получаю выпадающий список всех пользователей, зарегистрированных в приложении. я автоматически хочу, чтобы django связал пользователя с текущим зарегистрированным пользователем и позволил ему выбрать пакет, который он хочет купить и заполнить модель (таблицу) автоматически.
Мой models.py
def get_deadline():
return dt.today() + timedelta(days=30)
class CustomUser(AbstractUser):
Address = models.CharField(max_length=500)
def __str__(self):
return self.username
class Plans(models.Model):
plan_name = models.CharField(max_length=50)
speed = models.IntegerField()
price = models.FloatField()
def __str__(self):
return self.plan_name
class Orders(models.Model):
user = models.ForeignKey(CustomUser, on_delete = models.CASCADE)
pack = models.ForeignKey(Plans, on_delete = models.CASCADE)
start_date = models.DateField(auto_now_add=True)
end_date = models.DateField(default=get_deadline())
is_active = models.BooleanField(default=True)
def __str__(self):
name = str(self.user.username)
return name
my views.py
class UserBuyPlan(LoginRequiredMixin, View):
template = 'plans/plan.html'
#success_url = reverse_lazy('autos:all')
success_url = reverse_lazy('home-home')
def get(self, request):
form = BuyPlanForm()
ctx = {'form': form}
return render(request, self.template, ctx)
def post(self, request):
form = BuyPlanForm(request.CustomUser,request.POST)
if not form.is_valid():
ctx = {'form': form}
return render(request, self.template, ctx)
make = form.save()
return redirect(self.success_url)
my forms.py (я пытался искать в интернете и нашел эту init реализацию, но она не работает)
class BuyPlanForm(forms.ModelForm):
class Meta():
model = Orders
fields = "__all__"
def __init__(self, *args, **kwargs):
self.user = CustomUser
super(BuyPlanForm, self).__init__(*args, *kwargs)
self.fields['user'].initial = self.user
фотография полученной формы прилагается ниже

Так, я нашел ответ. Просто пришлось немного изменить функцию просмотра. Если вам нужен подробный учебник, пожалуйста, посетите https://www.youtube.com/watch?v=-s7e_Fy6NRU&t=1840s. он объясняет намного лучше.
class UserBuyPlan(LoginRequiredMixin, CreateView):
model = Orders
template_name = 'plans/plan.html'
fields = ['pack']
def form_valid(self, form):
form.instance.user = self.request.user
return super().form_valid(form)
а также пришлось добавить метод absolute url к моему методу заказа
class Orders(models.Model):
user = models.ForeignKey(CustomUser, on_delete = models.CASCADE)
pack = models.ForeignKey(Plans, on_delete = models.CASCADE)
start_date = models.DateField(auto_now_add=True)
end_date = models.DateField(default=get_deadline())
is_active = models.BooleanField(default=True)
def __str__(self):
name = str(self.user.username)
return name
def get_absolute_url(self):
return reverse('home-home')
остальное все одинаково.