Hm. I get it but it's look like there is no attribute category_set in link.
Given me this error: 'Link' object has no attribute 'category_set'
Here is my models:
#category/models.py
class Category(models.Model):
name = models.CharField("Name", max_length=100)
user = models.ForeignKey(settings.AUTH_USER_MODEL, null=True)
time = models.DateTimeField(auto_now_add=True)
slug = models.SlugField(max_length=100)
objects = models.Manager()
def __str__(self):
return self.name
def get_absolute_url(self):
return reverse('category:category_detail', kwargs={"name": self.name,})
#links/models.py
class Link(models.Model):
title = models.CharField("Headline", max_length=100)
submitter = models.ForeignKey(settings.AUTH_USER_MODEL, null=True)
submitted_on = models.DateTimeField(auto_now_add=True)
rank_score = models.FloatField(default=0.0)
url = models.URLField("URL", max_length=250)
category = models.ForeignKey(Category, null=True)
description = models.TextField(blank=True)
slug = models.SlugField(unique=True)
img = models.ImageField(upload_to="thumbnail/", blank=True)
image_og = models.ImageField(upload_to="thumbnail/", blank=True, default
="/static/images/entry/default.png")
with_votes = LinkVoteCountManager()
objects = models.Manager()
def __str__(self):
return self.title
def get_absolute_url(self):
return reverse('link:link_detail', kwargs={"category": self.category
.slug, "slug": self.slug,
'pk': str(self.id)
})
....
On Sunday, August 21, 2016 at 2:56:57 PM UTC+3, ludovic coues wrote:
>
> You need to check somewhere that the category exist and that your item
> belong to the category.
> The get object method seems like a good place to do it. Something like
> that should do the trick
>
> def get_object(self, queryset=None):
> """ Return a 404 code if
> * no link with given slug/id
> * no category with given slug
> * link isn't part of the right category
> """"
> link = get_object_or_404(Link,
> pk=self.kwargs['pk'],slug=self.kwargs['slug'])
> category = get_object_or_404(Category,
> slug=self.kwargs['category'])
> if not category in link.category_set:
> raise Http404
> return link
>
> 2016-08-21 11:01 GMT+02:00 'voger' via Django users
> <[email protected] <javascript:>>:
> > I barely understand django my self but I hope I am pointing you in the
> right
> > direction.
> >
> > 1. I don't understand what the (?:/(?P<slug>[\w\d-]+))?/ part in your
> > pattern is supposed to do. My regexp-fu is weak so I can't comment on
> that
> >
> > 2. Your url will match and pass to the view whatever url you give it. So
> > even if you give a pk and slug that don't exist in database, still the
> view
> > will get called as long as the regexp matches.
> >
> > 3. In your view you check the db against the pk and slug and if not
> found
> > __the view__ rises 404.
> >
> > 4. You don't check if category exist in database and you don't rise 404
> if
> > not. In this case it is assumed it is always right.
> >
> >
> > On 20/08/2016 06:10 μμ, Yunus wrote:
> >>
> >> Hello,
> >>
> >> I want to two slugs in one URL pattern. These slugs from different
> >> models. I have a model Link with a many to one relationship with a
> model
> >> category.
> >>
> >> Actually these two slugs is working. But one of the slugs is accepting
> >> whatever I write in the category_slug section of the url.
> >>
> >> Let's say:I
> >> write 127.0.0.1:8000/there_is_no_name_like_that_in_the_database/pk/slug
> >> this.
> >> I am going to this page but there is no category with this name. So,
> >> basically is accepting whatever I write.
> >> *#links/views.py*
> >> |
> >> classLinkDetailView(FormMixin,DetailView):
> >> model =Link
> >> context_object_name ='link'
> >> form_class =CommentForm
> >> success_url =reverse_lazy('home')
> >>
> >>
> >> defget_object(self,queryset=None):
> >>
> >>
> >>
> returnget_object_or_404(Link,pk=self.kwargs['pk'],slug=self.kwargs['slug'])
> >>
> >>
> >> ...
> >> |
> >>
> >> *#links/urls.py*
> >> |
> >> urlpatterns =[
> >>
> >>
> >> ...
> >>
> >> url(
> >>
> >> regex=r'^k/(?P<category>[\w-]+)/(?P<pk>\d+)(?:/(?P<slug>[\w\d-]+))?/$',
> >> view=views.LinkDetailView.as_view(),
> >> name='link_detail'
> >> ),
> >>
> >>
> >> ...
> >> ]
> >> |
> >>
> >> --
> >> 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 [email protected] <javascript:>
> >> <mailto:[email protected] <javascript:>>.
> >> To post to this group, send email to [email protected]
> <javascript:>
> >> <mailto:[email protected] <javascript:>>.
> >> 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/0b8482ee-5e64-4ee8-a664-d1d938767bd6%40googlegroups.com
>
> >>
> >> <
> https://groups.google.com/d/msgid/django-users/0b8482ee-5e64-4ee8-a664-d1d938767bd6%40googlegroups.com?utm_medium=email&utm_source=footer>.
>
>
> >> For more options, visit https://groups.google.com/d/optout.
> >
> >
> > --
> > 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 [email protected] <javascript:>.
> > To post to this group, send email to [email protected]
> <javascript:>.
> > 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/c9904d3f-f162-cfa5-c9e7-b53330225742%40yahoo.gr.
>
>
> >
> > For more options, visit https://groups.google.com/d/optout.
>
>
>
> --
>
> Cordialement, Coues Ludovic
> +336 148 743 42
>
--
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 [email protected].
To post to this group, send email to [email protected].
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/0e73ba29-be8d-46a2-aaa2-04cac94bfffa%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.