2011-04-08 11 views
5

मैं इस मॉडल है:Django बनाओ ContentType आवश्यक नहीं

class Auth(models.Model): 
    TYPES = (
     ('agent', 'Agent'), 
     ('broker', 'Broker'), 
    ) 
    user = models.ForeignKey(User, unique=True) 
    type = models.CharField(max_length=20, choices=TYPES) 
    applied = models.BooleanField() 
    content_type = models.ForeignKey(ContentType) 
    object_id = models.PositiveIntegerField(db_index=True) 
    content_object=generic.GenericForeignKey('content_type', 'object_id') 

और जब भी मैं कुछ इस तरह करते हैं:

IntegrityError: (1048, "Column 'content_type_id' cannot be null") 

:

User.objects.create_user(username="myuser", password="myuser", email="myemail.com") 
u = User.objects.get(username="myuser") 
profile = Auth(user=u) 
profile.save() 
निश्चित रूप से

मैं त्रुटि प्राप्त करेंगे मेरे उद्देश्यों के लिए, मैं सामग्री प्रकार से नहीं बच सकता क्योंकि ऑथ एक ऐसी कक्षा है जहां ब्रोकर और एजेंट वर्ग से विरासत मिलती है, जो मुझे अनुमति देता है कई कस्टम प्रोफाइल करो।

मैं सोच रहा था कि क्या कोई तरीका था जिसमें सामग्री प्रकार की आवश्यकता नहीं होगी।

अग्रिम धन्यवाद!

उत्तर

4
content_type = models.ForeignKey(ContentType, null=True, blank=True) 

null=True, यह डेटा मॉडल में वैकल्पिक बनाता blank=True यह वैकल्पिक जब व्यवस्थापक प्रपत्र का उपयोग करता है (अन्यथा आप सत्यापन त्रुटि मिलेगी)।

+0

यह – yretuta

+1

काम नहीं करता है क्या आपने डेटाबेस संरचना को पुन: उत्पन्न किया है? – vartec

+1

ओह। haha। मैं वह भूल गया। मैं यह जवाब चुन रहा हूं क्योंकि यह और अधिक पूरा है। धन्यवाद – yretuta

1

या तो बस क्षेत्र को default=... मान दें, या इसे null=True पर सेट करें।

1
+0

content_type स्थापित करने की कोशिश की और शून्य पर object_id, यह काम नहीं किया। इसे content_object पर सेट करने से त्रुटि होगी – yretuta

0

ठीक है, मैं Django के साथ एक ही समस्या आज encontered 1.8

models.py:

class Author(models.Model): 
    user = models.OneToOneField(User) 
    name = models.CharField(max_length=50) 
    sig = models.CharField(max_length=150) 
    up_num = models.IntegerField(default=0) 

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

views.py:

def register(request): 
    if request.method == 'POST': 
     form = registerFrom(request.POST) 
     if form.is_valid(): 
      username = form.cleaned_data['username'] 
      email = form.cleaned_data['email'] 
      password = form.cleaned_data['password'] 
      name = form.cleaned_data['name'] 
      sig = form.cleaned_data['sig'] 
      u = User.objects.create_user(username, email, password) 

      add_blog_permission = Permission.objects.create(codename='add_blog') 
      change_blog_permission = Permission.objects.create(codename='change_blog') 
      delete_blog_permission = Permission.objects.create(codename='delete_blog') 
      add_comment_permission = Permission.objects.create(codename='add_comment') 
      add_message_permission = Permission.objects.create(codename='add_message') 
      delete_message_permission = Permission.objects.create(codename='delete_message') 
      u.user_permissions.add(add_blog_permission, change_blog_permission, delete_blog_permission, add_comment_permission, add_message_permission, delete_message_permission) 


      Author.objects.create(user=u, name=name, sig=sig) 
      return HttpResponseRedirect(reverse('login', args=())) 
    form = registerFrom() 
    return render(request, 'register.html', {'form': form}) 
रजिस्टर पृष्ठ पर

रन सर्वर के बाद, जब प्रस्तुत डेटा:

IntegrityError: (1048, "Column 'content_type_id' cannot be null") 

अंत में, मैंने पाया कि मेरे कोड में त्रुटियाँ हैं:

add_blog_permission = Permission.objects.create(codename='add_blog') 

होना चाहिए:

add_blog_permission = Permission.objects.get(codename='add_blog') 
संबंधित मुद्दे