簡體   English   中英

Django以表單訪問外鍵字段

[英]Django access foreignkey fields in a form

我正在開發一個虛擬圖書館應用程序(使用 Django v2.1、python v3.5),任何人都應該能夠訪問書籍目錄並通過簡單地留下一些個人信息(如姓名、姓氏、電子郵件等)來申請貸款。

這些是models.py中的一些模型:

class Profile(models.Model):
    name = models.CharField(max_length=50)
    # more fields like surname, email, phone...

class TrackBook(models.Model):
    # Somefields to keep track of date and status...
    borrower = models.ForeignKey(Profile, on_delete=models.SET_NULL, null=True, blank=True)

class Book(TrackBook):
    #info about title, author, etc.

我想要做的是用我在表單中創建的 Profile 實例更新 Book 實例的借用者

1) 我試過直接訪問 BookForm 中的借用人字段,但沒有奏效。

# views.py
class BookRequestView(UpdateView):
    template_name = 'core/book_request.html'
    model = Book
    form_class = BookProfileForm

#forms.py
class BookProfileForm(forms.ModelForm):
    class Meta:
        model = Book
        fields = ['borrower']

# book_request.html
<form class="" action="" method="post">
  {% csrf_token %}
  <div class="row">
    {{ form.borrower.name }}
    <! -- and all other fields -->
  </div>
    {% for field in form.hidden_fields %}
      {{ field }}
    {% endfor %}
  <button type="submit" class="btn btn-block btn-success btn-flat">Save</button>
 </form>

2)我已經嘗試創建 Profile 模型的 inlineformset_factory() 但它不起作用,因為我想要實現的是在書籍表單中創建一個配置文件表單,反之亦然。 所以這里的例子不是我要找的。

也許我會因為一件非常簡單的事情而發瘋,但我似乎無法為這個問題找到任何兼容的解決方案......歡迎任何幫助/建議。 提前致謝。

您需要一個基於 Profile 而不是 Book 的表單。 然后,您的視圖需要創建配置文件,然后將圖書的借閱者設置為該配置文件。

class BookProfileForm(forms.ModelForm):
    book = forms.ModelChoiceField(queryset=Book.objects.all())
    class Meta:
        model = Profile
        fields = ['name', 'address',...]

class BookRequestView(CreateView):
    template_name = 'core/book_request.html'
    model = Book
    form_class = BookProfileForm

    def form_valid(self, form):
        borrower = form.save()
        book = Book.objects.get(self.kwargs['book_id']  # or whatever is in your URL
        book.borrower = borrower
        book.save()
        return redirect(self.get_success_url())

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM