Reputation: 2625
moneylog get relation with moneybook, and when i create moneylog, I wanna moneybook of moneylog choose default=moneybook.pk
and these are my codes.
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>
so if i click the + button, then
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
but it doesn't work. as you see.. how can i transfer moneybook.pk to moneylogs forms.py? or how can achieve moneybook belongs to moneybook default?
Upvotes: 0
Views: 45
Reputation: 47364
You don't need to pass moneybook obect to the form. Instead you can set it on view level:
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)
Upvotes: 2