Как заполнить поле 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

фотография полученной формы прилагается ниже enter image description here

Так, я нашел ответ. Просто пришлось немного изменить функцию просмотра. Если вам нужен подробный учебник, пожалуйста, посетите 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')

остальное все одинаково.

Вернуться на верх