问题描述
我有一些django模型为我的扩展用户配置文件。问题是,这个代码不使用syncdb时创建表(没有任何反应,没有验证错误)。为什么会发生? (这些模型在其他地方给出了导入错误):
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'
user_created函数在别的地方?信号不应该在这里创建问题...
Should I move this user_created function somewhere else ? Signals shouldn't create problems here...
推荐答案
你似乎有某种交叉导入;如果你导入一些模型到表单和一些形式从那里回到模型这不能解决,因为当需要导入模型形式,表格需要模型 ...这不能解决!
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!
这篇关于模型在同步时不创建表的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!