2013-03-22 50 views
1

我有一個Django模型:Django的 - 形式與外鍵是指非主鍵

class ObservationMedia(models.Model): 
    observation = models.ForeignKey(Observation)  
    audio_file = AudioFileField (upload_to=audio_dir, blank=True, null=True) 
    photo_file = models.ImageField(upload_to=img_dir, blank=True, null=True) 

    def __unicode__(self): 
     return "obsv-media "+str(self.pk) 

其中觀察是:

class Observation(GUIDModel): 
    guid = models.CharField(unique=True, max_length=36, default=uuid.uuid4) 
    # many more fields here 

是否有可能有ObservationMedia其中一個ModelForm傳遞給Observation的值不是其主鍵,而是​​字段?我想到的解決方案是製作​​主鍵。可以避免這種情況嗎?

+0

您可以覆蓋模型窗體的__init__方法並將觀察字段的值設置爲使用GUID。 – Amyth 2013-03-22 10:45:50

回答

0

你可以做下面的事情,它沒有測試我現在能想到的。

class ObservationMediaForm(ModelForm): 
    """ Observation Media Model Form """ 

    class Meta: 
     model = models.ObservationMedia 
     fields = ('observation', 'audio_file', 'photo_file') 

    def __init__(self, *args, **kwargs): 
     super(ObservationMediaForm, self).__init__(*args, **kwargs) 
     if self.instance: 
      self.fields['observation'].initial = models.Observation.objects.get(pk=self.instance.observation).guid 
+0

這是一個很好的解決方案。就目前而言,它會在最後一行提出一個DoesNotExist錯誤,我不太明白。任何想法? – gozzilli 2013-03-22 11:05:03

+0

嘗試打印或記錄self.instance.observation並查看它是否是'id'或對象本身。如果它是可以直接執行的對象'.initial = self.instance.observation.guid' – Amyth 2013-03-22 11:08:24

+0

'self.instance.observation'也返回'DoesNotExist'錯誤。這很奇怪,因爲如果我'dir(self.instance)','觀察'在那裏。 – gozzilli 2013-03-22 12:08:57