gpt4 book ai didi

python - Django 访问表单中的外键字段

转载 作者:行者123 更新时间:2023-12-01 08:49:19 24 4
gpt4 key购买 nike

我正在开发一个虚拟图书馆应用程序(使用 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.

我想要做的是使用我在表单中创建的配置文件实例来更新 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() ,但它不起作用,因为我想要实现的是在书籍表单中创建一个配置文件表单,而不是反之亦然。所以这个例子here不是我要找的。

也许我会因为一件非常简单的事情而失去理智,但我似乎找不到任何兼容的解决方案来解决这个问题...欢迎任何帮助/建议。提前致谢。

最佳答案

您需要一个基于个人资料而不是书籍的表单。然后,您的 View 需要创建配置文件,然后将图书的借阅者设置为该配置文件。

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())

关于python - Django 访问表单中的外键字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53192329/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com