2016-03-04 95 views
0

我正在使用Django REST框架。我有兩個模型,網站和狀態。Django通過外鍵或其他字段引用模型

class Sites(models.Model): 
    site_id = models.AutoField(primary_key=True) 
    status = models.ForeignKey(Statuses, models.DO_NOTHING, blank=True, null=True) 
class Statuses(models.Model): 
    status_id = models.AutoField(primary_key=True) 
    description = models.CharField(max_length=255, blank=True, null=True, unique=True) 

    class Meta: 
     managed = True 
     db_table = 'Statuses' 

我希望能夠在網站上執行GET,並有Statuses.description場返回(而不是Statuses.status_id)。另外,我希望它可以在POST中互換地使用status_id或description來創建新網站。這類功能屬於哪裏(串行器,模型等)?

我知道我可以通過向Sites模型添加一個屬性然後在Sites序列化器中引用這個字段來完成我的問題的第一部分。

@property 
def status(self): 
    return self.row_status.description 

但是我認爲模型的約定是它應該是數據庫表的1:1表示。有一個更好的方法嗎?

回答

0

這非常適合在串行器,像這樣:(但status領域可能不應該有null=True集)

class SitesSerializer(serializers.ModelSerializer): 
    description = serializers.CharField(source='status.description') 

    class Meta: 
     model = Sites 
     fields = ('site_id', 'description') 

+0

這個回答我的問題的第一部分,並且是一個非常比在模型中使用@property更好。但是,它並沒有解決問題的第二部分:有沒有辦法通過整數(id)或字符串(描述)來發布新的站點和引用狀態? –