SORU
3 Mayıs 2011, Salı


'django OneToOneField arasındaki fark ne ve ForeignKey?

Django OneToOneField ve ForeignKey arasındaki fark nedir?

CEVAP
5 Mayıs 2011, PERŞEMBE


OneToOneField(SomeModel) ForeignKey(SomeModel, unique=True) arasında bazı farklılıklar olduğunu fark etmek dikkatli olun. The Definitive Guide to Django: belirtildiği gibi

OneToOneField

Bire-bir bir ilişki. Kavramsal olarak, bu unique=True ForeignKey benzer ama "" ilişkinin tarafı doğrudan tek bir nesne döndürür. ters

Aksine OneToOneField "" ilişkisi, ForeignKey "" ilişki döndürür QuerySet. bir ters bir ters

Örnek

Eğer aşağıdaki iki model var, örneğin (tam model kodu):

  1. Car model OneToOneField(Engine) kullanır
  2. Car2 model ForeignKey(Engine2, unique=True) kullanır

python manage.py shell içinde aşağıdaki: idam

15* *Örnek

>>> from testapp.models import Car, Engine
>>> c = Car.objects.get(name='Audi')
>>> e = Engine.objects.get(name='Diesel')
>>> e.car
<Car: Audi>

unique=True Örnek ForeignKey

>>> from testapp.models import Car2, Engine2
>>> c2 = Car2.objects.get(name='Mazda')
>>> e2 = Engine2.objects.get(name='Wankel')
>>> e2.car2_set.all()
[<Car2: Mazda>]

Model Kodu

from django.db import models

class Engine(models.Model):
    name = models.CharField(max_length=25)

    def __unicode__(self):
        return self.name

class Car(models.Model):
    name = models.CharField(max_length=25)
    engine = models.OneToOneField(Engine)

    def __unicode__(self):
        return self.name

class Engine2(models.Model):
    name = models.CharField(max_length=25)

    def __unicode__(self):
        return self.name

class Car2(models.Model):
    name = models.CharField(max_length=25)
    engine = models.ForeignKey(Engine2, unique=True)

    def __unicode__(self):
        return self.name

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Awesomesauce Network

    Awesomesauce

    4 EKİM 2012
  • CaliforniaMetin

    CaliforniaMe

    3 ŞUBAT 2013
  • HowcastFoodDrink

    HowcastFoodD

    21 EYLÜL 2010