2

I have some django models for my extended users profile. Problem is that this code does not create tables when syncdb is used (simply nothing happens. No validation errors). Why is that happening? (Also those models give import error elsewhere) :

#!/usr/bin/env python
# encoding: utf-8
from django.db import models
from django.contrib.auth.models import User
from registration.signals import user_registered
from forms import ExtendedRegistrationForm
import hashlib
class InheritedProfile(models.Model):
 first_name = models.CharField("Name", max_length=50, blank=True, null=True)
 last_name = models.CharField("Last name", max_length=50, blank=True, null=True)
 pid = models.CharField("PESEL", max_length=11, blank=True, null=True)
 street = models.CharField("Street", max_length=50, blank=True, null=True)
 number = models.CharField("Flat/house number", max_length=10, blank=True, null=True)
 code = models.CharField("Zip ", max_length=6, blank=True, null=True)
 city = models.CharField("City", max_length=50, blank=True, null=True) 
 class Meta:
 abstract=True
class UserProfile(InheritedProfile):
 def upload_path(self, field_attname):
 filename = hashlib.md5(field_attname).hexdigest()[:4] + "_" + field_attname
 return "uploads/users/%s" % (filename,)
 user = models.ForeignKey(User, unique=True, related_name='profile')
 image = models.ImageField(upload_to=upload_path, verbose_name="Image", blank=True, null=True)
 class Meta:
 ordering = ['-id']
 db_table = 'userprofile'
 def __unicode__(self):
 return u"%s " % self.user.username
def user_created(sender, user, request, **kwargs):
 form = ExtendedRegistrationForm(request.POST)
 extended_user = UserProfile(user=user)
 extended_user.is_active = False
 extended_user.first_name = form.cleaned_data['first_name']
 extended_user.last_name = form.cleaned_data['last_name']
 extended_user.pid = form.cleaned_data['pid']
 extended_user.image = form.cleaned_data['image']
 extended_user.street = form.cleaned_data['street']
 extended_user.number = form.cleaned_data['number']
 extended_user.code = form.cleaned_data['code']
 extended_user.city = form.cleaned_data['city']
 extended_user.save()
user_registered.connect(user_created)
class Friend(InheritedProfile):
 friend_of = models.ForeignKey(UserProfile, related_name='friend_of')
 class Meta:
 db_table = 'friend'

In contrary this code produces tables flawlessly :

#!/usr/bin/env python
# encoding: utf-8
from django.db import models
from django.contrib.auth.models import User
import hashlib
class InheritedProfile(models.Model):
 first_name = models.CharField("Name", max_length=50, blank=True, null=True)
 last_name = models.CharField("Last name", max_length=50, blank=True, null=True)
 pid = models.CharField("PESEL", max_length=11, blank=True, null=True)
 street = models.CharField("Street", max_length=50, blank=True, null=True)
 number = models.CharField("Flat/house number", max_length=10, blank=True, null=True)
 code = models.CharField("Zip ", max_length=6, blank=True, null=True)
 city = models.CharField("City", max_length=50, blank=True, null=True) 
 class Meta:
 abstract=True
class UserProfile(InheritedProfile):
 def upload_path(self, field_attname):
 filename = hashlib.md5(field_attname).hexdigest()[:4] + "_" + field_attname
 return "uploads/users/%s" % (filename,)
 user = models.ForeignKey(User, unique=True, related_name='profile')
 image = models.ImageField(upload_to=upload_path, verbose_name="Image", blank=True, null=True)
 class Meta:
 ordering = ['-id']
 db_table = 'userprofile'
 def __unicode__(self):
 return u"%s " % self.user.username
class Friend(InheritedProfile):
 friend_of = models.ForeignKey(UserProfile, related_name='friend_of')
 class Meta:
 db_table = 'friend'

Should I move this user_created function somewhere else ? Signals shouldn't create problems here...

asked Jun 26, 2010 at 13:42
2
  • Is it possible that in forms you probably import models or a specific model? Commented Jun 26, 2010 at 17:58
  • I was importing specific models. Okay dunno why this function collided with creating tables for models, but I've moved it to a different file. Now everything works. Commented Jun 26, 2010 at 18:23

1 Answer 1

3

Well you seem to have some kind of cross import; if you import some models to forms and some form from there back to models this can't be resolve, because when processing models forms is required to be imported, and forms requires models again... This can't be resolved!

Besides this I think it's better design not needing to import forms in a models module, because they are more related to views!

answered Jun 26, 2010 at 22:47
Sign up to request clarification or add additional context in comments.

1 Comment

Circular imports resolve perfectly fine. It's attribute lookups within the modules that may not. stackoverflow.com/questions/3082015/…

Your Answer

Draft saved
Draft discarded

Sign up or log in

Sign up using Google
Sign up using Email and Password

Post as a guest

Required, but never shown

Post as a guest

Required, but never shown

By clicking "Post Your Answer", you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.