2010-02-27 36 views
0

假设我有一个模型,并且它有一个外键给另一个。在Charfield中显示django中外键的值,出错

class ModelA(models.Model): 
    field = models.CharField(max_length=100) 

class ModelB(models.Model): 
    model_a = models.ForeignKey(ModelA) 

比我有这种形式:

class FormB(models.ModelForm): 
    model_a = forms.CharField(required=True) 

    def clean(self): 
     model_a = self.cleaned_data["model_a"] 
     try: 
      v = ModelA.objects.get(model_a=model_a) 
      self.cleaned_data["model_a"] = v 
     except Exception: 
      self._errors['model_a'] = ErrorList(["ModelA not found"]) 
    return self.cleaned_data 

现在,每当我在FormB输入一个字符值,它会在MODELA搜索并 返回清理数据。

当我使用表单列出预先存在的实例时,它显示了ID而不是值。

def my_view(request): 
    instance = ModelB.objects.get()[0] 
    form = FormB(instance=instance) 
    return render_to_response("bla.html", {"form" : form}) 

有没有人知道我通过实例时如何显示此CharField中的值?

感谢, 尼科

回答

0

我能想到的两个选项:

  1. ModelB隐藏着editable=falsemodel_a场,并添加CharFieldModelB存储用户输入的文本。然后在表单中显示此字段,但使用其值填充model_a

  2. 使用自动填充字段,例如使用django-autocomplete。这允许用户输入对象的名称,而不是使用select小部件。 (但是没有JavaScript,可以回到select)。