Doctrine last record in one-to-many association - doctrine-orm

I'm new in Doctrine and want to use Doctrine instead of Zend_DB.
How can I get a last record from one-to-many assoc. For exampla I have 2 tables - one for user and one for their login datetimes. I want to get all users with their last login.

I know this is not direct answer to your question, but I should not determine last login time that way.
I'd rather added new field to the user table, and each time he logins updated this field.
In this case all the hassle with relations comes away.

Related

Django: Custom mail list

I need to make a list of users that receive emails when an event occurs. This list should also be modifiable by admins.
What's the Django way to do this if I'm using sqlite? My first thought was to create a new table for the mail list and throw it somewhere in the admin panel but this seems to be a bit of an inefficient method? Is Django groups the way to go in this situation? Or a many-to-many relationship between a groups table and users? Or something else perhaps?
If you only want admins to be able to update the mail list then groups are ideal for this.

Does Django store information about who has edited and/or created a record, and if so, where?

Django has an authentication and authorization scheme baked in ('django.contrib.auth') as well as modelforms to generate forms for easy input of data into the database.
I'd like to be able to record who created a record, leveraging django.contrib.auth, with the explicit purpose of limiting editing of that same record to just that user and/or people with an "edit" permission. I know that I could use the #user_passes_test decorator to restrict access to editing my record in some fashion, but I don't know what I would compare the request.user.name to in order to determine if the current user originally created that record.
How much of this do I need to roll on my own? Do I need to capture the name author, save it to the model, and then read it - or is there something already in the framework that would do this for me?
And, if I was to attempt to save the author in a field, how would I go about doing that in such a way as to not let the user edit their own credentials?
There are a couple of apps to do something similar, please check https://www.djangopackages.com/grids/g/model-audit/
About the last questions, to prevent the user not to edit its own credentials, you can mark the field with editable=False so it wont appear in the admin or ModelForms.

How can I implement adding multiple objects with Django form?

How I can go about adding multiple objects from a single form with Django?
For example: if I have a sales form which stores sold products' register.
Imagine the form:
datetime: [_____________]
customer: [_____________]
product: [______________] ---> How should I implement adding multiple products
in the same form?
cost: [_________________]
Save (button)
Hint: it is just a question, if you have some ideas tell me please because I don't know how to do it.
thanks
One way is to use a Formset. Formsets you may have seen, for example, in Django admin for displaying multiple related objects as inlines.
Another way could involve AJAX, example solution:
“Added products” is a simple <ul> list with products added to order
“Search product” is a plain text field, where user enters product name or SKU
User input is sent via AJAX to the server, which returns a list of relevant products
These product suggestions are displayed to user
When user clicks on a product name, another AJAX request is made to associate given product with the order
After request completes, the “Added products” list is refreshed via AJAX, and newly added product appears there
This would require that you first create a temporary order to which you could later attach products via separate requests. Formsets don't have this requirement, but personally I haven't used them a lot, they look a bit cumbersome.

Django: Save user-submitted data from ModelForm for admin review and committing at a later date

I have a form on my Django site (made with ModelForm) where users can submit some data to create new objects or modify existing objects. These data, however, need to be reviewed by our staff before they're committed to the database, sometimes in bulk at a later date.
I know I can use .save(commit=False) in my form-processing view to return an object that has not been saved to the database yet. But is there a way to collect all of these objects from multiple user submissions for later review? Ideally, I'd have an admin page that had a summary list of submissions with "Commit" or "Reject" buttons.
There's no one-step-out-of-the-box way to do this (at least not built in to Django), so you'll need to create the logic yourself, which should be pretty straightforward. Some approaches to consider:
Have a second model/table to which your form saves, then create a view for the review functionality which copies any approved records into the first table.
Avoid having second model/table and add a approved = BoolField(default=False) field to your model/table. Set objects to a custom manager which filters for default=True so the rest of your code will only see approved records by default. Have a second manager that does the opposite, i.e. filtering for unapproved records. Using this second manager, create a view for the review functionality which flips approved to True for anything that gets approved.
If, with the second approach above, you want use Django's admin site to do the review, create a proxy for your model which by default uses the second manager which filters for unapproved records. Then you can use the admin's inline display and editing functionality to see records at a glance and click approve as needed.

Should I ForeignKey to Django User or a Profile model?

I'm wondering what people's thoughts are on joining models directly to the auth.User object vs to the user's profile model.
I'm storing some different types of models which my user are adding in my app. App users will search for other users via criteria on these models.
On the one hand, I'm thinking that if I join straight to User then I won't need to do request.user.get_profile() each time I need to grab the User's records, and it doesn't presuppose that a User always has a profile (they do in my app at the mo, but still). This leaves the profile model as just containing the user's contact details.
On the other hand, I imagine I'll most likely need values from the Profile (eg name, location) when I'm looking up these other models.
No doubt either will work, so maybe it doesn't matter, but I just wondered what other people's thoughts were.
Thanks!
Ludo.
I would also recommend creating foreign-keys to the User model. It just makes your life simpler when working with the user object in the view, for one. So, you can do things like request.user.foo_set, etc. without having to go through the profile model.
In general: If you want to make your apps reusable, always create foreign keys to User model.
As you already said, in most cases you will need User as well as Profile instance, so to prevent multiple database queries, use cache.
If reusability isn't relevant, create foreign key to Profile and use select_related() to get User instance with single query.