1

私はDjangoにモデルを持っています:

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

まだ割り当てられていないオプションのみを表示し、標準のドロップダウン選択リストのユーザー/管理者でこのタスクオプションにすでに割り当てられて いる場合、フィールドのオプションlimit_choices_to=を 使用するにはどうすればよいですか?contentContentDataSet

を使おうとしましたが、その場合、このタスクオプション limit_choices_to = {'task__isnull':True}にすでに割り当てられていることがわかりません。content

limit_choices_to = models.Q(task__isnull=True) | models.Q(task=self)self定義されていないため、機能していません

4

2 に答える 2

2

これは、limit_choices_to では実行できません。ただし、問題なく機能する 2 つの異なるアプローチを使用できます。

1) ModelAdmin のクエリセットを次のようにオーバーライドするためにForeignKeys使用できます。formfield_for_foreignkey

def formfield_for_foreignkey(self, db_field, request, **kwargs):
    if request.user.is_superuser:
        return super(UserOwnerProtectorModelAdmin, self).formfield_for_foreignkey(db_field, request, **kwargs)

    if db_field.name == "task":
        # This next line only shows owned objects
        # but you can write your own query!
        kwargs["queryset"] = db_field.related_model.objects.filter(user=request.user)
    return super().formfield_for_foreignkey(db_field, request, **kwargs)

2) 2 番目の選択肢として、OneToOne フィールドで役立つフィールド queryset をオーバーライドする例を次に示します。 Django ForeignKey limit_choices_to a different ForeignKey id

幸運を!

于 2018-11-03T03:39:01.203 に答える
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/をご覧ください。

于 2012-12-23T20:35:16.933 に答える