2016-04-14 30 views
0

Kullanıcı Modelimi bir UserProfile modeli ile genişletmek istiyorum. Bu UserProfile modeli bir ForeignKey Alanı içerir. Formda, bu form alanını önceden doldurmak için ModelChoiceField kullanmak istiyorum. Ben formu göndermek zamanForeignKey Alanıyla Form Verilerini Kaydetme

, ben

ValueError at /accounts/register/ 
Cannot assign "'13'": "UserProfile.course" must be a "Course" instance. 

Herhangi bir yardım mutluluk duyacağız olsun!

Benim Kod:

models.py

class Course(models.Model): 
    course_accid = models.CharField(max_length=10) 

    def __str__(self): 
     return self.course_accid 


class UserProfile(models.Model): 
    # This line is required. Links UserProfile to a User model instance. 
    user = models.OneToOneField(User) 

    website = models.URLField(blank=True) 
    picture = models.ImageField(upload_to='profile_images', blank=True) 
    course = models.ForeignKey(Course) 

    def __unicode__(self): 
     return self.user.username 



def user_registered_callback(sender, user, request, **kwargs): 
      profile = UserProfile(user = user) 
      profile.website = request.POST["website"] 
      profile.course = Course.objects.get(pk=request.POST["course"]), 
      profile.save() 

forms.py

class RegistrationForm(RegistrationForm): 
    course = forms.ModelChoiceField(queryset=Course.objects.all()) 
    website = forms.URLField() 
+0

Ayrıca, kullanıcıyı kaydettirmeye çalıştığınız görünümü bize gösterebilir misiniz? Formun doğrulanmasını nasıl ele alıyorsunuz? Ayrıca, 'sınıf RegistrationForm (RegistrationForm):' doğru görünmüyor. – ozgur

+0

Bunu işlemek için django-registration kullanıyorum ve bu nedenle işlemek için bir yöntem veya sınıf yok. RegistrationForm (RegistrationForm) şu an fark etmediğim şanssız bir isim olabilir. Ben form doldurucusu için özel UserProfile alanlarını ekleyerek django kayıttan RegistrationForm değiştiriyorum. Farklı bir şey seçmeliydim. – kftb

cevap

0

Yani, gerçekleşmesinden sorun course ihtiyaçları olan bir course örneğine ayarlanması olmasıdır ModelChoiceField'dan önce forms.py numaralı telefondan adım adım ilerleyin. Nedeni sorgulama sebebi, queryset ile yaptığınız gibi, gerçek nesneye değil, eşleşen bir dizgiyi aramaktır. iki adımda bölmek ise

class = [some_method_for_getting_a_class_object] 
UserProfile.class = class 

Sonra o hata kurtulmak gerekir.

+0

Teşekkür ederiz! Sanırım çalışmamın nedenini anladım ama bunu uygulamaya koymakta zorlanıyorum. = Course.objects.all() ders = forms.ModelChoiceField (ders) 'Bu gibi görünmüyor kursu: ' sınıf RegistrationForm (RegistrationForm): ben benim forms.py değiştirmek gerektiği anlamına mı çalışmak. – kftb

+0

@kftb Aynı hatayı mı, yoksa farklı mı? –

+0

aynı hata iletisidir. – kftb

İlgili konular