2012-03-16 21 views
7

im iki modele sahip bir şirketidir ve diğer bir yetkinlik varve bir kullanıcı var yeterlilikler girmek gerekir
şimdi yönetici olarak kullanıcı oluşturulurken nitelikler girmek gerekir bunu nasıl yaparım?django bir çok ilişki için

Kullanıcıların modelinde çok fazla alan tutmaya çalıştım ama boşuna… diğer kullanıcılarla ilgili nitelikler, yeni kullanıcı için yeni yeterlilik oluşturmam gereken alanlarda çalışıyor. Kod aşağıdaki

.. Burada

class Qualification(models.Model): 
    qualification = models.CharField(max_length=250) 
    max_marks = models.IntegerField(max_length=50) 
    marks_obtained = models.IntegerField(max_length=50) 
    qualifying_year = models.DateField(auto_now=False, null=True) 

class CompanyUser(User): 
    date_of_birth = models.DateField(auto_now=False, null=True) 
    position = models.CharField(max_length=100) 
    qualifications = models.ManyToManyField(Qualification) 

şirket kullanıcı detay ..

{ "kullanıcı adı": "steve", "pozisyon": "Senior Engineer", "date_of_birth" "1986/05/14"}

{ "nitelik": "orta okul", "max_marks": "1000", "marks_obtained": "850", "qualifying_year": "1990" da}

{"qua lification ":" lisans "," max_marks ":" 750 "," marks_obtained ":" 680 "," qualifying_year ":" 1992 ")

{" yeterlilik ":" postgraduation "," max_marks ":" 1500 "," marks_obtained ":" 1280 "," qualifying_year ":" 1997 "}

+0

Bir yeterlilik tam olarak bir kullanıcıyla ilgili mı olmalı? Veya birkaç kullanıcı aynı kalifikasyona sahip olabilir mi? Daha sonraki durumda ManyToManyField doğrudur, çünkü bir Şirket Yetkilisi birçok kalifikasyona sahiptir ve bir kalifikasyon birçok şirket kurucusu tarafından tutulabilir. – j0ker

+0

@jOker yeterlilik ** tam olarak bir ** kullanıcıya o ilgili olmalıdır kullanıcı tarafından elde edilen işaretler/puan içerir --- beri ve niteliklerin hiç kullanıcıdan kullanıcıya değişir. user1'in 2 niteliğe sahip olduğunu, ardından user2'nin 2'den fazla veya 2'den fazla niteliğe sahip olabileceğini söyleyin. – Dharani

cevap

13

Aradığınız birebir ilişki Django'da yok. Buna gerek yok, çünkü bunu başka bir yoldan yapabilirsiniz: Yabancı bir kişinin ilişkiden kullanıcı ile ilişkisi. aşağıdaki gibi örneğe göre, modeller tanımlarsınız:

class Qualification(models.Model): 
    qualification = models.CharField(max_length=250) 
    max_marks = models.IntegerField(max_length=50) 
    marks_obtained = models.IntegerField(max_length=50) 
    qualifying_year = models.DateField(auto_now=False, null=True) 
    user = models.ForeignKey('CompanyUser', related_name='qualifications') 

class CompanyUser(User): 
    date_of_birth = models.DateField(auto_now=False, null=True) 
    position = models.CharField(max_length=100) 

Yani, orada yeterliliği için CompanyUser belirtilen ilişki ama (yani her yeterlilik biri kullanıcıya ait CompanyUser için Niteliklerini ForeignKey ilişkisi yoktur, ancak birden fazla yeterlilik aynı kullanıcıya ait olabilir). Django otomatik olarak aradığınız One-To-Many ilişki olan CompanyUser'den geriye doğru ilişkiyi korur. ForeignKey'nin related_name numaralı seçeneği ile, geriye doğru ilişki için anlamlı bir ad belirtebilirsiniz (bu durumda 'nitelikler'). Artık user.qualifications özniteliğine sahip bir CompanyUser nesnesindeki Nitelikler'e erişebilirsiniz.

Yönetici olarak, önce yeni bir Şirket Yöneticisi'ni ve daha sonra bu kullanıcıya ForeignKey aracılığıyla atadığınız Niteliksel niteliklerin sayısını oluşturursunuz.

Django dokümanlar bölümünde yaklaşık Model relationships yılında bu şeyler hakkında mutlaka okuyun.

+0

@joker, cevabın faydalı olduğunu düşündüğünüz için teşekkürler, fakat yukarıdaki çözümle ilgili başka bir sorunum var. CompanyUser oluşturduktan sonra o kullanıcı için nitelikler oluşturmalıyım. ama şirket kullanıcısını oluştururken nitelikler oluşturmam gerekiyor. bunu nasıl yapabilirim. – Dharani

+0

Nitelikler, ForeignKey olarak kimliğine bel bağladığından, ilk olarak CompanyUser'i oluşturmanız gerekir.Böylece, yeterlilik kaydedildiğinde kullanıcı zaten veritabanında olmalıdır. Yöneticinin her iki eylemini de tek bir adımda gerçekleştirmenin yerleşik bir yolu yoktur. Bununla birlikte, uygulamayı kendiniz yazıyorsanız, Veriler'in yanı sıra Nitelikler için veri girişi yapmak, verileri sunucuya göndermek ve kullanıcıyı önce ve sonra niteliğini kaydetmek için bir görünüm işlevi kullanmak üzere bir form oluşturabilirsiniz. . – j0ker

+0

@ j0ker-- teşekkürler bu gerçekten yardımcı oldu. Yerleşik bir işlevsellik olup olmadığını düşünüyordum. – Dharani