听起来你想为你的模型建立一个管理器:
models.py
from django.db import models
class OrderManager(models.Manager):
def order_choices(self):
return [(i, i) for i in OrderModel.objects.values_list('order', flat=True)]
class OrderModel(models.Model):
objects = OrderManager()
order = models.IntegerField()
class Meta:
ordering = ['order']
def __unicode__(self):
return '%i' % self.order
forms.py
from django import forms
from yourapp.models import OrderModel
class OrderModelForm(forms.ModelForm):
order = forms.ChoiceField(choices=OrderModel.objects.order_choices())
class Meta:
model = OrderModel
admin.py
from django.contrib import admin
from yourapp.forms import OrderModelForm
from yourapp.models import OrderModel
class OrderModelAdmin(admin.ModelAdmin):
form = OrderModelForm
admin.site.register(OrderModel, OrderModelAdmin)
编辑
管理器用于在没有模型对象实例的情况下进行一般模型查询。如果您不了解管理器的概念,您仍然可以从管理器类中重构代码,将其粘贴到其他地方并在您的代码中导入该函数。管理器允许您抽象出可以重用的自定义通用查询集。查看更多详情https://docs.djangoproject.com/en/dev/topics/db/managers/
没有管理器的代码看起来像
views.py 或其他文件
from app.models import OrderModel
def order_choices():
return [(i, i) for i in OrderModel.objects.values_list('order', flat=True)]
如果您想多次重复使用上述代码,可以从代码中的任何位置:
from app.views import oder_choices
order_choices()
相对于:
from app.models import OderModel
OrderModel.objects.order_choices()
如果您只想使用上述一次,您可以将其留在forms.py 中,如另一个答案所示。如何重构代码完全取决于您。