2009-09-01 5 views
4

Как получить значения внешнего ключа? У меня есть общая модель автомобиля, которая соединяет год, серию, тип двигателя, стиль кузова, передачу и поезд ... все как внешние ключи. Я хотел бы получить значения этих полей для моего приложения, но я зациклился на том, как я буду их обсуждать. Любые идеи будут высоко оценены.Получить значение внешнего ключа

class Model(models.Model): 

    model = models.CharField(max_length=15, blank=False) 
    manufacturer = models.ForeignKey(Manufacturer) 
    date_added = models.DateField() 
    def __unicode__(self): 
     name = ''+str(self.manufacturer)+" "+str(self.model) 
     return name 


class Year(models.Model): 

    ALPHA_NUMERIC_CHOICES = (
     ('1', 'Numeric'), 
     ('A', 'Alphabetic'), 
) 

    year = models.PositiveSmallIntegerField() 
    position_7_char = models.CharField(max_length=1, choices=ALPHA_NUMERIC_CHOICES) 
    position_10 = models.CharField(max_length=1, blank=False) 

    def __unicode__(self): 
     return unicode(self.year) 


class Series(models.Model): 

    series = models.CharField(max_length=20, blank=True) 
    model = models.ForeignKey(Model) 
    date_added = models.DateField() 

    def __unicode__(self): 
     name = str(self.model)+" "+str(self.series) 
     return name 


class CommonVehicle(models.Model): 

    year = models.ForeignKey(Year) 
    series = models.ForeignKey(Series) 
    engine = models.ForeignKey(Engine) 
    body_style = models.ForeignKey(BodyStyle) 
    transmission = models.ForeignKey(Transmission) 
    drive_train = models.ForeignKey(DriveTrain) 

    def __unicode__(self): 
     name = ''+str(self.year)+" "+str(self.series) 
     return name 


class Vehicle(models.Model): 

    stock_number = models.CharField(max_length=6, blank=False) 
    vin = models.CharField(max_length=17, blank=False) 
    common_vehicle = models.ForeignKey(CommonVehicle) 
    exterior_colour = models.ForeignKey(ExteriorColour) 
    interior_colour = models.ForeignKey(InteriorColour) 
    interior_type = models.ForeignKey(InteriorType) 
    odometer_unit = models.ForeignKey(OdometerUnit) 
    status = models.ForeignKey(Status) 
    odometer_reading = models.PositiveIntegerField() 
    selling_price = models.PositiveIntegerField() 
    purchase_date = models.DateField() 
    sales_description = models.CharField(max_length=60, blank=False) 

    def __unicode__(self): 
     return self.stock_numberodels.ForeignKey(CommonVehicle) 
+0

Не могли бы вы немного уточнить свой вопрос? Может быть, представить свои определения моделей? –

ответ

3

Вам нужны фактические ID? Попробуйте что-нибудь вроде my_vehicle_ref.series.id.

Кроме того, я надеюсь, вы знаете, что атрибут series права есть на самом деле экземпляр Series, чтобы вы могли получить доступ к любой из его свойств, например, my_vehicle_ref.series.model.model.

+0

sweet ... позвольте мне попробовать – 2009-09-01 13:22:51

+0

BTW ... Я получаю доступ к этим значениям из шаблона ... не так уверен, что это то, что вы имели в виду, но vehicle.year.id должен возвращать год ... правильно? Я немного новичок в Django, поэтому я еще не понял его полностью. – 2009-09-01 14:00:12

+0

Вы прошли через (учебник) [http://docs.djangoproject.com/en/dev/intro/tutorial01/]? Это приятное вступительное слово. 'vehicle.year.id' возвращает атрибут' id' этого 'Year', который, вероятно, автогенерируется и, скорее всего, не то, что вы хотите. В представленных определениях моделей «Год» не имеет атрибутов, которые бы соответствовали тому, что большинство людей традиционно считают модельным годом. Вы можете добавить атрибут 'model_year = CharField (max_length = 6)' или аналогичный. –

Смежные вопросы