Domanda

Sto creando piccola applicazione Django che detiene alcune alcune domande (e risposte per loro)

Quello che voglio fare è quello di mostrare all'utente domanda a caso, ma solo da quelli che non è stato ancora risolto da lui. Mi chiedo come fare questo.

Per il momento, ho definito il profilo utente modello in questo modo:

class UserProfile(models.Model):
    rank = models.IntegerField(default = 1)
    solvedQ = models.ManyToManyField(Question)
    user = models.ForeignKey(User, unique=True)

Quindi i problemi risolti sono aggiunti in questo modo:

if user.is_authenticated():
    profile = user.get_profile()
    profile.rank += 1
    profile.solvedQ.add(Question.objects.get(id=id))

Ora, se la vista deve mostrare domanda a caso, ma non dalla lista già risolto ...

C'è un buon modo per intersecare Domande e solvedQuestions .... così domanda viene scelto dalla lista irrisolto?

È stato utile?

Soluzione

ManyToMany rapporti sono automaticamente simmetriche in Django ... http://docs.djangoproject.com/en/1.1/topics/db/models/#many-to-many-relationships

Esegui una query dal modello domanda

Senza vedere il vostro modello quesion, suppongo che finirà per qualcosa di simile:

possible_questions = Questions.objects.filter(~(UserProfile=profile))

I credo che query darà i tutti i risultati in cui l'utente relativo alla domanda non corrisponde l'utente corrente. Io non sono molto familiare con l'esecuzione di "non" query. Una ricerca rapida mi ha detto che il '~' lo farà, ma si dovrebbe poi controllare.

Quindi, si può semplicemente prendere uno a caso dal set di query restituito.

** Modifica **

Sembra che si può afferrare il diritto casuale nella query facendo qualcosa di simile:

possible_questions = Questions.objects.filter(~(UserProfile=profile)).order_by('?')

Poi basta utilizzare il primo restituito.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top