python - 如何使用特定用户拥有的对象创建 ModelForm

标签 python django django-models django-forms

Possible Duplicate:
How do I filter ForeignKey choices in a Django ModelForm?

假设我有一些如下所示的模型:

from django.db import models
from django.contrib.auth.models import User

class Author(models.Model):
    first_name = models.CharField(max_length=100)
    last_name = models.CharField(max_length=100)
    owner = models.ForeignKey(User)

class Book(models.Model):
    title = models.CharField(max_length=100)
    authors = models.ManyToManyField(Author)
    owner = models.ForeignKey(User)

如果我为 Book 模型创建一个 ModelForm,用户可以从所有作者中进行选择,而不仅仅是他们拥有的作者。我如何为 Book 模型创建一个 ModelForm,让用户只选择她/他拥有的作者?

最佳答案

您可以覆盖模型表单的 __init__ 方法并限制作者 model choice field 的查询集.

class BookForm(forms.ModelForm):

    class Meta:
        model = Book
        # exclude the owner and set it in the view
        exclude = ('owner',) 

    def __init__(self, *args, **kwargs):
        super(BookForm, self).__init__(*args, **kwargs)
        if self.instance.owner:
            self.fields['author'].queryset = Author.objects.filter(owner=self.instance.owner)

在您看来,请确保使用已设置所有者的实例来实例化表单。例如,要添加一本书,它看起来像这样:

def add_book(request):
    book = Book(owner=request.owner)
    form = BookForm(data=request.POST or None, instance=book)
    if form.is_valid():
        book.save()
        return HttpResponseRedirect('/success-url/')
    return render(request, "my_template.html", {'form': form})

关于python - 如何使用特定用户拥有的对象创建 ModelForm,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11372395/

相关文章:

python - 如何在 Windows 上使用 Python 更改文件夹图标?

python - 收到错误并没有返回 HttpResponse 对象。到底是怎么回事?

python - 在python中每X秒执行一个函数(带参数)

python - 为什么 bool 是 int 的子类?

python - 如何通过传入选项列表来过滤 Django 查询集?

python - 将查询集数据传递给另一个查询 django

python - Django 字段选择两个值之间的范围?

django - django中业务逻辑放在哪里

python - 用灰色背景填充图像数组

reactjs - Django/React - 生产 API URL 路由问题