On 05/11/2014 18:16, Carl Meyer wrote:
> Hi,
>
> On 11/05/2014 11:09 AM, Some Developer wrote:
>> I'm trying to write my own implementation of the Django comments
>> framework for various reasons and am wondering how one would link
>> comments to a particular object (model) of another type. For instance I
>> could have a ForeignKey in the Comment model pointing to a Blog post
>> article but that would mean that you could only leave comments on Blog
>> post articles. I want to be able to configure my Comment model so that
>> it can link to any other object of any type.
>>
>> Does anyone know how to do that? I think it has something to do with the
>> ContentType framework that comes with Django but I have never used it
>> before so I'm not entirely sure.
> I think this is what you're looking for:
> https://docs.djangoproject.com/en/1.7/ref/contrib/contenttypes/#generic-relations
>
> However, by using GenericForeignKey you give up some valuable things:
> the database can no longer enforce referential integrity on those
> relationships, and joins become more complex and often slower. So I
> would recommend at least considering alternatives.
>
> One possible alternative is to instead provide the bulk of your Comment
> model as an abstract base model class, and then have users of your
> comment app create their own Comment model inheriting from your abstract
> base, and adding a single FK to whatever model they want comments on.
> (This presumes that most users of your comments app will only need
> comments on a single model in a given system; or if they want comments
> on more than one model, they don't mind having two separate Comment
> models to handle that.)
>
> Carl
Thanks for the info. You make some interesting points about the database
not being able to enforce referential integrity.
I hadn't thought of providing the comment model as a base class and
having the users specialise it themselves. How would that work in
regards to template tags? For instance if I had a template tag like this:
{% get_comments for obj as var %}
how would one hook in a user provided object with its own model which is
not known ahead of time or would you suggest using a template tag such
as this instead? I guess letting the user explicitly state the
application and the model themselves offers the best flexibility in the
long run.
{% get_comments for [app].[model] [object_id] %}
--
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 http://groups.google.com/group/django-users.
To view this discussion on the web visit https://groups.google.com/d/msgid/django-users/545A6DDD.5050702%40googlemail.com.
For more options, visit https://groups.google.com/d/optout.
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment