fetshing data from one to many table in django

Viewed 28

please i need help on this my code in django, i was trying to query database to fetch skills that user did not fill description when they r register this my code..........................................................................

Model

# Create your models here.
class Profile(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE, null=True, blank=True)
    name = models.CharField(max_length=200, null=True, blank=True)
    email = models.EmailField(max_length=500, null=True, blank=True)
    user_name = models.CharField(max_length=200, null=True, blank=True)
    location = models.CharField(max_length=200, null=True, blank=True)
    short_intro = models.CharField(max_length=200, null=True, blank=True)
    bio = models.TextField(blank=True, null=True)
    profile_image = models.ImageField(null=True, blank=True, upload_to='profiles/', default="profiles/user-default.png")
    social_github = models.CharField(max_length=200, null=True, blank=True)
    social_twitter = models.CharField( max_length=200, null=True, blank=True)
    social_linkedin = models.CharField(max_length=200, null=True, blank=True)
    social_youtube= models.CharField(max_length=200, null=True, blank=True)
    social_website = models.CharField(max_length=200, null=True, blank=True)
    created = models.DateTimeField(auto_now_add=True)
    id = models.UUIDField(default=uuid.uuid4, unique=True, primary_key=True, editable=False)

    def __str__(self):
        return str(self.user_name)

class Skill (models.Model):
    owner= models.ForeignKey(
        Profile, on_delete=models.CASCADE, null=True, blank=True)
    name = models.CharField(max_length=200, null=True, blank=True)
    description= models.CharField(max_length=300, null=True, blank=True)
    created = models.DateTimeField(auto_now_add=True)
    id = models.UUIDField(default=uuid.uuid4, unique=True, primary_key=True, 
                            editable=False)
                        
 views

 def userProfile(request, pk):
    profile = Profile.objects.get(id=pk)
    topskills = profile.skill_set.exclude(description__exact="")
    otherskills = profile.skill_set.filter(description="")
    context = {'profile':profile, 'topskills':topskills, 'otherskills':otherskills}
    return render(request, 'users/user-profile.html', context)

 Template
             {% for skill in topskills %}
              <div class="devSkill">
                <h4 class="devSkill__title">{{skill.name}}</h4>
                <p class="devSkill__info">{{skill.description}}</p>
              </div>
              {% endfor %}


              <h3 class="devInfo__subtitle">Other Skills</h3>
              <div class="devInfo__otherSkills">
                {% for otherskill in otherskills %}
                <span class="tag tag--pill tag--sub tag--lg">
                  <small>{{otherskill.name}}</small>
                </span>
                {% endfor %}
1 Answers

Try this:

profile.skill_set.filter(description__isnull=True)

or:

profile.skill_set.filter(description!="")

or:

from django.db.models import Q
Skill.objects.filter(Q(description!="" ) | Q(description__isnull=True))
Related