0
此問題與Set model field choices attribute at run time? 類似但是,我的問題是我想在類級別更改選項屬性的默認值。更改模型字段的選擇屬性
我有這個
class Project(models.Model):
name = models.CharField(...)
@staticmethod
def getAllProjectsTuple():
return tuple([(p.id, p.name) for p in Project.objects.all()])
class Record(models.Model):
project = models.ForeignKey(
Project,
verbose_name='Project',
help_text='Project name',
blank=True, null=True,
on_delete=models.SET_NULL,
choices = Project.getAllProjectsTuple(),
class RecordForm(ModelForm):
class Meta:
model = Record
我的問題是,所有的RecordForm將使用在模型中的模塊導入時的可用選項的TypedChoiceField創建。但是,用戶可以創建更多的項目,這些項目將永遠不會出現在RecordForm中;相同的刪除。
我試圖直接與RecordForm的INIT篡改:
self.fields['project']._choices = [('', '---------'),] + [(p.id, p.name) for p in Project.objects.all()]
或與INIT記錄的:
self._meta.get_field('project')._choices = Project.getAllProjectsTuple()
,但似乎沒有任何工作。
感謝您的幫助。
爲什麼你在使用選項而不是僅僅使用標準的'ModelSelectWidget'和queryset?默認行爲與您的'getAllProjectsTuple'行爲相同。 –
只是'選擇= Project.objects.values_list('id','name')'? – karthikr
@Peter,這實際上解決了它。我不知道我是如何理解的。如果我不覆蓋它,那麼是否會一直重新評估選項的Django魔術?謝謝 ! – Ptah