ofey
ofey

Reputation: 3347

Django add field to auth_user

I am trying to implement the above to add a field 'posts' to the user model using the first option, extended it.

models.py

   from django.contrib.auth.models import User

    class NewUserModel(models.Model):
        user = models.OneToOneField(User, on_delete=models.CASCADE)
        posts = models.IntegerField(default=0)

views.py

def site_users(request):
    site_users = User.objects.all().reverse()
    paginator = Paginator(site_users, 10)
    page = request.GET.get('page')
    try:
        users_model = paginator.page(page)
    except PageNotAnInteger:
        # If page is not an integer, deliver first page.
        users_model = paginator.page(1)
    except EmptyPage:
        # If page is out of range (e.g. 9999), deliver last page of results.
        users_model = paginator.page(paginator.num_pages)

return render(request, 'site_users.html', {'users_model': users_model, 'current_time':   timezone.now()})

But how can I get the posts field in the template, (updated, corrected and working!)

{% for item in users_model %}
        <tr>
          <td><a href="{% url 'profile' item.id %}">{{ item.username }}</a></td>
          <td>{{ item.newusermodel.posts }}</td>
          <td></td>
          <td></td>
        </tr>
        {% endfor %}

The tables in the sqlite3 DB have no User model, but it does have auth_user. Should i be using that instead of User?

enter image description here

Thanks,

Upvotes: 0

Views: 1269

Answers (1)

Jens Astrup
Jens Astrup

Reputation: 2454

users_model doesn't reference NewUserModel, it references User. You need to access the related model in your template like so:

{% for item in users_model %}
        <tr>
          <td><a href="{% url 'profile' item.id %}">{{ item.username }}</a></td>
          <td>{{ item.newusermodel.posts }}</td>
          <td></td>
          <td></td>
        </tr>
        {% endfor %}

Upvotes: 1

Related Questions