Как я могу скинуть pk в forms.py django - PullRequest
0 голосов
/ 22 января 2020

moneylog получает связь с moneybook, и когда я создаю moneylog, я хочу moneybook of moneylog выбрать default = moneybook.pk

, и это мои коды.

moneylog / model .py

moneybook = models.ForeignKey(
    moneybook_models.Moneybook, on_delete=models.CASCADE)

moneylogs / urls.py

app_name = "moneylogs"

urlpatterns = [
    path("create/<int:pk>/", views.moneylog_create.as_view(), name="create"),

moneybooks / detail. html

<a style="display:scroll;position:fixed;bottom:50px;right:30px;" href="{% url 'moneylogs:create' pk %}">
        <div class="rounded-full h-16 w-16 flex items-center justify-center bg-red-400 text-bold font-bold text-white">+</div>
    </a> 

поэтому, если я нажму кнопку +, то

moneylogs / views.py

class moneylog_create(FormView):

    form_class = forms.CreateMoneylogForm
    template_name = "moneylogs/create.html"

    def form_valid(self, form):
        moneylog = form.save()
        moneylog.save()
        return redirect(reverse("cores:home"))

moneylog / forms.py

class CreateMoneylogForm(forms.ModelForm):
    class Meta:
        model = models.Moneylog
        form.fields['moneybook'].initial = moneybook_models.Moneybook.objects.get(
            pk=pk)
        fields = (
            "pay_day",
            "payer",
            "dutch_payer",
            "price",
            "category",
            "memo",
        )
        widgets = {
            "dutch_payer": forms.CheckboxSelectMultiple
        }

    def save(self, *args, **kwargs):
        moneylog = super().save(commit=False)
        return moneylog

но это не работает. как вы видите .. как я могу перевести moneybook.pk в moneylogs forms.py? или как можно добиться того, что Moneybook принадлежит Moneybook по умолчанию?

1 Ответ

2 голосов
/ 22 января 2020

Вам не нужно передавать деньги в книгу. Вместо этого вы можете установить его на уровне просмотра:

class moneylog_create(FormView):

    form_class = forms.CreateMoneylogForm
    template_name = "moneylogs/create.html"

    def form_valid(self, form):
        moneybook = Moneybook.objects.get(pk=self.kwargs["pk"]
        form.instance.moneybook = moneybook
        return super().form_valid(form)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...