django:ForeignKeyField limit_choices_to“parent pk”?

时间:2015-05-17 19:05:42

标签: django django-models

我有一个模型(父模型):

class Post(models.Model):
    image = models.ImageField(upload_to='%Y/%m/%d')
    title = models.CharField(max_length=200)
    width = models.DecimalField(max_digits=3, decimal_places=0)
    height = models.DecimalField(max_digits=3, decimal_places=0)
    year = models.PositiveIntegerField()


    def __str__(self):
        return self.title

和另一个模型(儿童模特):

class Addimg(models.Model):

    post = models.ForeignKey('Post', null=True)
    addimg = models.ImageField(upload_to='%Y/%m/%d')

    def __str__(self):
        return self.post

我的Addimg表格:

class AddimgForm(forms.ModelForm):
    class Meta: 
        model = Addimg 
        fields = ('post', 'addimg', 'width', 'height',)

views.py使用表格:

def addimg(request, pk):
    if request.method == "POST":
        form = AddimgForm(request.POST, request.FILES)
        post = get_object_or_404(Post, pk=pk)
        if form.is_valid():
            addimg = form.save(commit=False)
            addimg.addimg = request.FILES['addimg']
            addimg.save()
            return redirect('blog.views.detail', pk=post.pk)
    else:
        form = AddimgForm()
    return render(request, 'blog/edit.html', {'form': form})

我的问题是,当我创建一个“子模型”时,我的post字段将所有已创建的Post模型的实例作为选项返回。我想要的是它自动只显示与之相关的一个帖子而没有选择。 ForeignKey是正确的模型吗?

任何想法如何工作。感谢

2 个答案:

答案 0 :(得分:1)

您要做的是创建Many-to-one relationship。例如,

  

post = models.ForeignKey('Post',null = True)

这意味着您可以对其进行过滤,例如

Addimg.objects.filter(post=Post)
or
Post.objects.get(pk=1)
Post.addimg_set.filter(xyz=etc)

在此处阅读更多内容:https://docs.djangoproject.com/en/1.8/topics/db/examples/many_to_one/

答案 1 :(得分:1)

INSERT INTO ResultsTable (ActionType, Count, UserType) SELECT ActionType, UserType, COUNT(*) as Count FROM ActionTable GROUP BY ActionType, UserType; 字段在Django ModelForm中被翻译为ModelChoiceField。如果您检查该类,您会注意到此类字段需要ForeignKey属性。默认情况下,Django提供完整的对象集。您可以通过提供表单所需的queryset对象在表单__init__方法中覆盖此内容。

请考虑以下示例代码:

parent