Итак, у меня есть класс, который имеет внешний ключ.Невозможно использовать естественные ключи в сериализации внешнего ключа django
Это мой код
class Proxy(models.Model):
class Meta:
db_table = 'Proxy'
equipment = models.ForeignKey('Equipment', primary_key=True)
pop = models.ForeignKey('Pop')
Теперь, как обычно, когда я
import django.core.serializers as Serializer
res = Proxy.objects.filter(equipment_id__exact='eq1')
Serializer.serialize('json', res)
выход JSON содержит «идентификатор» из поп-музыки, а не имя, которое я хочу.
Таким образом, я использовал класс Manager, и это мой класс Поп сейчас-
class PopManager(models.Manager):
def get_by_natural_key(self, name):
return self.get(name=name)
class Pop(models.Model):
POP_TYPES = (
('phy','phy'),
('cloud','cloud'),
)
class Meta:
db_table = 'Pop'
unique_together = ('name', 'vip')
objects = PopManager()
name = models.CharField(max_length=10)
type = models.CharField(max_length=10, choices=POP_TYPES)
def natural_key(self):
return (self.name)
Но после этого, когда я
res = Proxy.objects.filter(equipment_id__exact='eq1')
Serializer.serialize('json', res, use_natural_keys=True)
Я получаю сообщение об ошибке, TypeError: Оборудование: EQ1 не является JSON serializable
Я также пробовал wadofstuff для этой сериализации внешних ключей, но, по-видимому, в Django1.5, есть столкновение между simplejson и json, и запрос выдавал ошибку. Поэтому я вернулся на круги своя.
Любая помощь будет высокоприобретенной. Я часами раскалываю волосы.
вместо '' res' в сериализации() '' попробовать список (Рез) '. –
Да, я сделал это уже. Тот же результат. –