Django:使用limit_choices_to限制管理菜单中的选项

时间:2012-12-23 20:10:38

标签: python django model

我在Django中有一个模型:

class Task(models.Model):  
    product = models.ForeignKey(Product)  
    content = models.OneToOneField(ContentDataSet)  

如果我只想显示尚未分配的limit_choices_to=选项并且已经分配给用户/管理员中的此任务选项,那么我如何为content字段使用选项ContentDataSet - 下来的选择?

我尝试使用limit_choices_to = {'task__isnull':True},但在这种情况下,我看不到已分配给此任务content选项。

limit_choices_to = models.Q(task__isnull=True) | models.Q(task=self)无效,因为self未定义

2 个答案:

答案 0 :(得分:0)

Limit_choices_to是一个Q对象。 在文档中,您有一个对ForeignKey进行类似限制的示例:https://docs.djangoproject.com/en/dev/ref/models/fields/#django.db.models.ForeignKey.limit_choices_to

有关查询的更多信息,请访问:https://docs.djangoproject.com/en/dev/topics/db/queries/

答案 1 :(得分:0)

使用limit_choices_to无法完成。 但是您可以使用两种可以正常工作的方法:

1)对于外键,您可以使用formfield_for_foreignkey覆盖ModelAdmin中的查询集,如下所示:

filePath.putFile(resultUri).addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
    @Override
    public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
        filePath.getDownloadUrl().addOnSuccessListener(new OnSuccessListener<Uri>() {
            @Override
            public void onSuccess(Uri uri) {

                final String downloadUrl = uri.toString();
                UserProfileRef.child("profile").child("imageURL").setValue(downloadUrl)
                  .addOnCompleteListener(new OnCompleteListener<Void>() {
                    @Override
                    public void onComplete(@NonNull Task<Void> task) {
                        loadingBar.dismiss();
                        if(task.isSuccessful()) {
                            Intent selfIntent = new Intent(ProfileActivity.this, ProfileActivity.class);
                            startActivity(selfIntent);
                            Toast.makeText(ProfileActivity.this, "Profile image stored to firebase database successfully.", Toast.LENGTH_SHORT).show();
                        }
                        else {
                            String message = task.getException().getMessage();
                            Toast.makeText(ProfileActivity.this, "Error Occured..." + message, Toast.LENGTH_SHORT).show();
                        }
                    }
                });
            }
        });
    }
});

2)作为第二选择,下面是一个示例,该示例覆盖了字段查询集,可以帮助您使用OneToOne字段: Django ForeignKey limit_choices_to a different ForeignKey id

祝你好运!