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

  • Myron and Nejusha dance

    Myron and Ne

    2 AĞUSTOS 2012
  • Paulo Bautista

    Paulo Bautis

    21 Aralık 2008
  • TheTwistedFrequency

    TheTwistedFr

    26 NİSAN 2010