在Django中,可以通过使用ModelChoiceField
来将Foreign键字段显示为下拉列表。但如果你想将其显示为文本值,可以通过以下步骤实现:
Author
和Book
,其中Book
模型有一个Foreign键字段指向Author
模型。你可以在Book
模型中添加一个新的字段,用于显示Author
的文本值:class Book(models.Model):
author = models.ForeignKey(Author, on_delete=models.CASCADE)
author_name = models.CharField(max_length=100, blank=True, null=True)
def save(self, *args, **kwargs):
self.author_name = self.author.name
super().save(*args, **kwargs)
在上面的例子中,我们添加了一个名为author_name
的CharField字段,用于存储Author
的文本值。在save
方法中,我们将author_name
字段设置为author
字段的name
属性。
BookForm
表单:from django import forms
from .models import Book
class BookForm(forms.ModelForm):
class Meta:
model = Book
fields = ['author_name']
在上面的例子中,我们定义了一个BookForm
表单,并指定了author_name
字段作为表单的唯一字段。
BookForm
来创建一个新的Book
对象:from django.shortcuts import render, redirect
from .forms import BookForm
def create_book(request):
if request.method == 'POST':
form = BookForm(request.POST)
if form.is_valid():
book = form.save(commit=False)
book.author = Author.objects.get(name=form.cleaned_data['author_name'])
book.save()
return redirect('book_list')
else:
form = BookForm()
return render(request, 'create_book.html', {'form': form})
在上面的例子中,我们使用BookForm
来处理POST请求,并在表单验证通过后,创建一个新的Book
对象。我们从表单的author_name
字段中获取作者的文本值,并使用Author.objects.get()
方法获取对应的Author
对象,然后将其赋值给book
对象的author
字段。
通过以上步骤,你可以将Foreign键字段显示为文本值而不是下拉列表。请注意,这只是一种实现方式,具体的实现方法可能因你的数据模型和需求而有所不同。
领取专属 10元无门槛券
手把手带您无忧上云