Я только начинаю с django tastypie, и я в восторге от этого.Мой вопрос: я ищу ту же функцию, что и в представлении администратора: укажите для полей чужих ключей, что нужно видеть в ответе других объектов, а что в подробном ответе.
Допустим, это моя простая модель:
class Location(models.Model):
name = models.CharField(max_length=256, blank=True)
longitude = models.FloatField(blank=True, default=0.0)
latitude = models.FloatField(blank=True, default=0.0)
description = models.CharField(max_length=256, blank=True)
shortname = models.CharField(max_length=256, blank=True)
tooltiptext = models.CharField(max_length=1000, blank=True)
locationtype = models.ForeignKey(LocationType, blank=True, null=True)
public_anonymous = models.BooleanField(default=False, blank=False, null=False)
public_authorized = models.BooleanField(default=False, blank=False, null=False)
def __str__(self):
return '%s' % (self.name)
class Variable(models.Model):
abbreviation = models.CharField(max_length=64, unique=True)
name = models.CharField(max_length=256, blank=True)
unit = models.CharField(max_length=64, blank=True)
def __str__(self):
return '%s [%s]' % (self.name, self.unit)
class Timeseries(models.Model):
locationkey = models.ForeignKey(Location)
variablekey = models.ForeignKey(Variable)
tstypekey = models.ForeignKey(TimeseriesType)
def __str__(self):
return '%s: %s (%s)' % (self.locationkey.name, self.variablekey.name, self.tstypekey.name)
и это мои ресурсы для API:
class LocationResource(ModelResource):
class Meta:
queryset = Location.objects.all()
resource_name = 'location'
excludes = ['public_anonymous', 'public_authorized']
authentication = BasicAuthentication()
authorization = DjangoAuthorization()
class VariableResource(ModelResource):
class Meta:
queryset = Variable.objects.all()
resource_name = 'variable'
authentication = BasicAuthentication()
authorization = DjangoAuthorization()
class TimeseriesTypeResource(ModelResource):
class Meta:
queryset = TimeseriesType.objects.all()
resource_name = 'timeseriestype'
authentication = BasicAuthentication()
authorization = DjangoAuthorization()
class TimeseriesResource(ModelResource):
location = fields.ForeignKey(LocationResource, 'locationkey', full=False)
variable = fields.ForeignKey(VariableResource, 'variablekey', full=False)
timeseriestype = fields.ForeignKey(TimeseriesTypeResource, 'tstypekey', full=False)
class Meta:
queryset = Timeseries.objects.all()
resource_name = 'timeseries'
authentication = BasicAuthentication()
authorization = DjangoAuthorization()
В TimeseriesResource, если вы используете full=False
, вы просто получите URL с идентификатором, если вы используетеfull=True
вы получите всю информацию.В действительности у местоположения есть намного больше информации.Мне нужно чуть больше информации, чем full = 'False', но не вся информация, использующая full=True
.Я не хочу использовать опцию исключения, потому что у меня нет информации в подробной информации или в списке объекта Location itselve.
один из вариантов, о котором я думал, - это сделать 2ресурсы для того же объекта, но это не кажется лучшим решением (но я думаю, это будет работать).Кстати: я подумал над этим вариантом, не будет работать (конечно), лучше использовать обходной путь, предложенный в ответе bmihelac (спасибо).
Хотя ... попытка обходного пути ... приводит меня кновый вопрос, см .:
django-tastypie: невозможно получить доступ к bundle.request в дегидрате (self, bundle)