如何解决,limit_choices_to不能成为Django中的ForeignKey?

时间:2017-10-21 09:42:13

标签: python django

我有一段代码如下:

models.py

class Notebook(models.Model):
    owner = models.ForeignKey(User, on_delete = models.CASCADE)
    name= models.CharField(max_length=50)

class Note(models.Model):
    create_user = models.ForeignKey(User, on_delete = models.CASCADE)
    text=models.CharField(max_length=500)
    notebook=models.ForeignKey(Notebook, on_delete = models.CASCADE, limit_choices_to = {'owner' : create_user})

但是我收到一个错误,即limit_users_to不能成为外键。 我希望用户只选择他们在编写笔记时创建的笔记本,但现在用户可以选择其他笔记本,而limit_choices_to未设置。 而笔记本必须是ForeignKey。 我该怎么办?

1 个答案:

答案 0 :(得分:1)

创建笔记时,您必须在视图中执行此操作

form.py

from .models import Note
from django.forms import ModelForm

class NoteForm(ModelForm):
    class Meta:
       model = Note

view.py

from django.views.generic.edit import CreateView
from .form import NoteForm
from .models import Note, Notebook

class NoteCreateView(CreateView):
    model=Note
    form_class=NoteForm

    def get_form(self, form_class=None):
        form = super(NoteCreateView, self).get_form(form_class)
        # Thats the solution:
        form.fields['notebook'].queryset = Notebook.objects.filter(owner=self.request.user)
        return form