Hi Nirmal,

I'll try to answer your question instead of assuming you're working with
django's auth system.

On 22-8-2012 7:13, Nirmal Sharma wrote:

> class People (models.Model):
>     person_name  = models.CharField(max_length=150)
>     
> 
> class comments (models.Model):
>     comment  = models.CharField(max_length=1000)   
>     root_comment =  models.ForeignKey('self', null=True, blank=True, 
> related_name="children")
>     People_id = models.ForeignKey(People)
^^^^^^^^^^^^^^^
That's bad practice, because you're not designing a database, you're
designing a model that is built from things, not id's. So name this
field person or commentator or written_by:
written_by = models.ForeignKey(People)

Same applies on numerous fields below. The reason it's bad practice is
because when you request an attribute the name of the attribute should
describe what you get. When you request comments.people_id the
expectation is that you get an id, while in actuality you get a model
instance.

> class comment_feedback (models.Model):
>     feedback_People_id = models.ForeignKey(People)
>     comment_id =   models.ForeignKey(comments)
>     feedback_type_id =  models.CharField(max_length=20, 
> choices=FEEDBACK_CHOICES)
>     class Meta:
>         unique_together = [("feedback_People_id", "info_id")]
>    
> We are trying build a html page that will do the following.
> Once a user logs in, he can write a new comment (that would result in an 
> insert into comments table)
> Alternatively he can do one of the following:
>     select a comment of some other peoples and give his feedback (that 
> would result in an insert into comment_feedback table)
>     select a comment and write his own comment with a feedback on the 
> original comment (that would result in an insert into comments table with 
> root_comment as the original comment and an insert into comment_feedback 
> table for the original comment)

Here's how to dissect your problem description:
- The person can do three things ("actions") that he cannot do at the
same time: the obvious solution is to use three different forms in the
same HTML page or use popup windows for action 2 and 3.
- The second and third option are mostly a UI problem, because how does
the user select the comment she's providing feedback for. Unless you put
a form below each comment (which will make the page possibly incredibly
long), you need to do some JavaScript programming that shows the form
below the right comment and stores the comment being commented on in
some hidden variables in that form. This is where I would hire a UI
programmer.

> We tried doing this inlineformset_factory and nested formsets. However we 
> are quite confused on how to proceed with this. Also the comment_feedback 
> table has 2 foreign keys.
That isn't a problem as long as the foreign keys are to different
tables. inlineformset_factory will find the foreign key that goes from
parent_model to model in it's function signature. It uses
_get_foreign_key() in forms/models.py for that.

> How do we handle this at the form and template level? 

Like I said, the selection process is mostly a UI nightmare. If you
solve that, creating the forms for it will be much easier to grasp.
-- 
Melvyn Sopacua

-- 
You received this message because you are subscribed to the Google Groups 
"Django users" group.
To post to this group, send email to django-users@googlegroups.com.
To unsubscribe from this group, send email to 
django-users+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/django-users?hl=en.

Reply via email to