I did as you said and I get DoesNotExist, CustomUser matching query does not exist. user = self.request.user my_user = CustomUser.objects.get_or_create(auth_user_ptr=user) # Assuming you have entry in your database if not my_user.allow_add_item():
On Friday, June 16, 2017 at 1:06:33 PM UTC+2, Nabil BOUDERBALA wrote:
-- I have changed the code to :
but I get AttributeError 'tuple' object has no attribute 'allow_add_item'.
Maybe the Item model should have a foreign key to the CustomUser model instead of the User model, because allow_add_item() is in the Item model. However, when I change the foreignkey, I get a cannot query "user" error.
For additional details, please take a look at users.py and the app with the extended user model views.py
I am not sure whether I can put the def allow_add_item(self): of the CustomUser directly in the django User model.
On Friday, June 16, 2017 at 1:06:33 PM UTC+2, Nabil BOUDERBALA wrote:
After extending an existing user model, I get RelatedObjectDoesNotExist exception with a value User has no dcf_profile. I seems that dcf_profile isn't created automatically for each user.
Please take a look at my model, view and form below and tell me how can I correct my views file?
My models.py :
class CustomUser(models.Model): auth_user_ptr = models.OneToOneField( User, parent_link=True, related_name='dcf_profile', primary_key=True ) phone = models.CharField(_('phone'), max_length=30, null=True, blank=True) receive_news = models.BooleanField(_('receive news'), default=True, db_index=True) class Meta: app_label = 'dcf' def allow_add_item(self): if self.item_set.count() > settings.DCF_ITEM_PER_USER_LIMIT : return False else: return True class Item(models.Model): slug = models.SlugField(blank=True, null=True, max_length=100) user = models.ForeignKey(User, on_delete=models.CASCADE) group = models.ForeignKey(Group, verbose_name=_('group')) title = models.CharField(_('title'), max_length=100) description = models.TextField(_('description' )) price = models.DecimalField(_('price'), max_digits=10, decimal_places=2) phone = models.CharField(_('phone'), max_length=30) is_active = models.BooleanField(_('display' ), default=True, db_index=True) updated = models.DateTimeField(_('updated' ), auto_now=True, db_index=True) posted = models.DateTimeField(_('posted' ), auto_now_add=True) def __unicode__(self): return self.title class Meta: verbose_name = _('item') verbose_name_plural = _('items') ordering = ('-updated', ) def get_absolute_url(self): return reverse('item', kwargs={ 'pk': self.pk, 'slug': self.slug }) def get_title(self): return u'%s' % self.title def get_description(self): return u'%s' % self.description[:155] def get_keywords(self): # TODO need more optimal keywords selection return ",".join(set(self.description.split ())) def get_related(self): # TODO Need more complicated related select return Item.objects.exclude(pk=self.pk )[:settings.DCF_RELATED_LIMIT] def save(self, *args, **kwargs): if self.slug is None: self.slug = slugify(unidecode(self.title)) super(Item, self).save(*args, **kwargs)My views.py :
class ItemCreateView(FormsetMixin, CreateView): is_update_view = False model = Item form_class = ItemCreateEditForm formset_class = inlineformset_factory(Item, Image, extra=3, fields=('file', )) @method_decorator(login_required ) def dispatch(self, *args, **kwargs): if not self.request.user.dcf_profile.allow_add_item (): messages.error(self.request, _('You have reached the limit!')) return redirect(reverse('my')) return super(ItemCreateView, self).dispatch(*args, **kwargs) def form_valid(self, form, formset): form.instance.user = self.request.user form.save() return super(ItemCreateView, self).form_valid(form, formset)My forms.py
class ItemCreateEditForm(forms.ModelForm ): class Meta: model = Item fields = ('group', 'title', 'description', 'price', 'phone', 'is_active')
You received this message because you are subscribed to the Google Groups "Django users" group.
To unsubscribe from this group and stop receiving emails from it, send an email to django-users+unsubscribe@googlegroups.com.
To post to this group, send email to django-users@googlegroups.com.
Visit this group at https://groups.google.com/group/django-users.
To view this discussion on the web visit https://groups.google.com/d/msgid/django-users/3bc3537c-b762-4e6f-af2e-0201fea53f9e%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.
No comments:
Post a Comment