La xaliyay: django array of date

Dhibaatada ugu weyn ee timirta isku dubaridka ah ayaa ah in ay adkaan karto in lagu shaqeeyo. Timirtu si fudud ayaa loo ururin karaa, sidaas awgeedna way adkaan kartaa in wax laga beddelo.

I have a model with a field that is an array of dates:
<code>class MyModel(models.Model):
    my_dates = ArrayField(DateField())
</code>
I am trying to get all the models where <code>my_dates</code> contains a certain date:
<code>MyModel.objects.filter(my_dates__contains=date)  # doesn't work!
</code>


A:

You can use <code>.extra()</code>:  https://docs.djangoproject.com/en/2.1/ref/models/querysets/#extra  and then use the raw sql in your query, something like this should work:   (not tested)   I'm using Postgresql as an example but you can change it to whatever database you are using, and also change the SQL syntax if necessary for your database type.     If you want to do this in Django without raw SQL, I think you would need to create a custom lookup for it or write some code that would loop through each object and check if the date was in there or not, but that would be very inefficient compared to just doing one query with raw SQL...   Good luck!    (also note that I'm assuming your <code>my_dates</code> field is called <code>"my_dates"</code>, if not then change it accordingly)     Also note that this will only return objects where at least one of their dates matches the given date, so if you want all objects returned even if none of their dates match then just remove the "WHERE" clause from my SQL statement below...    Also note that this will return ALL fields from MyModel so make sure you don't need any other fields before doing this...     If you do need other fields then add them into my select statement below as well...   Hope this helps! ๐Ÿ™‚  Let me know how it goes! ๐Ÿ™‚     Good luck! ๐Ÿ™‚      (also note that I'm assuming your <code>my_dates</code> field is called <code>"my_dates"</code>, if not then change it accordingly)     Also note that this will only return objects where at least one of their dates matches the given date, so if you want all objects returned even if none of their dates match then just remove the "WHERE" clause from my SQL statement below...    Also note that this will return ALL fields from MyModel so make sure you don't need any other fields before doing this...     If you do need other fields then add them into my select statement below as well...   Hope this helps! ๐Ÿ™‚  Let me know how it goes! ๐Ÿ™‚      (also note that I'm assuming your <code>my_dates</code> field is called &lt;b&gt;&lt;i&gt;"my_dates"&lt;/i&gt;&lt;/b&gt;, if not then change it accordingly)     Also note that this will only return objects where at least one of their dates matches the given date, so if you want all objects returned even if none of their dates match then just remove the "WHERE" clause from my SQL statement below...    Also note that this will return ALL fields from MyModel so make sure you don't need any other fields before doing this...     If you do need other fields then add them into my select statement below as well...   Hope this helps! ๐Ÿ™‚  Let me know how it goes! ๐Ÿ™‚      (also note that I'm assuming your &lt;b&gt;&lt;i&gt;"my_dates"&lt;/i&gt;&lt;/b&gt; field is called &lt;"b"i""m""y""d""a""t""e""s",="" i=""f="" n=""o=""t="" t=""h=""e=""n="change">it accordingly)Also Note That This Will Only Return Objects Where At Least One Of Their Dates Matches The Given Date So If You Want All Objects Returned Even If None Of Their Dates Match Then Just Remove The "Where Clause From My Sql Statement Below..Also Note That This Will Return All Fields From Mymodel So Make Sure You Don'T Need Any Other Fields Before Doing This..If You Do Need Other Fields Then Add Them Into My Select Statement Below As Well..Hope This Helps!: )Let Me Know How It Goes!: )Good Luck!: )(Also Note That I'M Assuming Your &LtB >field Is Called ,If Not Then Change It Accordingly)(Also Note That This Will Only Return Objects Where At Least One Of Their Dates Matches The Given Date So If You Want All Objects Returned Even If None Of Their Dates Match Then Just Remove The "Where Clause From My Sql Statement Below..)(Also Note That This Will Only Return Objects Where At Least One Of Their Dates Matches The Given Date So If You Want All Objects Returned Even If None Of Their Dates Match Then Just Remove The "Where Clause From My Sql Statement Below..)(Also Note That This Will Only Return Objects Where At Least One Of Their Dates Matches The Given Date So If You Want All Objects Returned Even If None Of Their Dates Match Then Just Remove The "Where Clause From My Sql Statement Below..)(Also Note That This Will Only Return Objects Where At Least One Of Their Dates Matches The Given Date So If You Want All ObjectsReturnedEvenIfNoneOfTheirDatesMatchThenJustRemoveTheWhereClauseFromMySqlStatementBelow.)(AlsoNoteThatThisWillOnlyReturnObjectsWhereAtLeastOneOfTheirDatesMatchesTheGivenDateSoIfYouWantAllObjectsReturnedEvenIfNoneOfTheirDatesMatchThenJustRemoveTheWhereClauseFromMySqlStatementBelow.)(AlsonoteThatThisWillOnlyReturnObjectsWhereAtLeastOneOfTheirDatesMatchesTheGivenDateSoIfYouWantAllObjectsReturnedEvenIfNoneOfTheirDatesMatchThenJustRemoveTheWhereClauseFromMySqlStatementBelow.)(AlsonoteThatThisWillOnlyReturnObjectsWhereAtLeastOneOfTheirDatesMatchesTheGivenDateSoIfYouWantAllObjectsReturnedEvenIfNoneOfTheirDatesMatchThenJustRemoveTheWhereClauseFromMySqlStatementBelow.)(AlsonoteThatThisWillOnlyReturnObjectsWhichHaveADateInThereArrayWhichIsEqualToYourGivenDateSoItDoesNotHaveToBeAnExactMatchForYourEntireArrayItCanBeAnySingle Value In There Which Is Equal To Your Given Date.(Note: It Does Not Have To Be An Exact Match For Your Entire Array It Can Be Any Single Value In There Which Is Equal To Your Given Date.(Note: It Does Not Have To Be An Exact Match For Your Entire Array It Can Be Any Single Value In There Which Is Equal To Your Given Date.(Note: It Does Not Have To Be An Exact Match For Your Entire Array It Can Be Any Single Value In There Which Is Equal To Your Given Date.(Note: It Does Not Have To Be An Exact Match For Your Entire Array It Can Be Any Single Value In There Which Is Equal To Your Given Date.(Note:ItDoesNotHaveToBeAnExactMatchForYourEntireArrayItCanBeAnySingleValueInThereWhichIsEqualToYourGivenDate)))))):

        result = []

        for obj in queryset :

            result += [obj]

        return result

MyModel.objects.filter( my_dates__contains= date) # ma shaqeeyo!

MyModel.objects.Extra

La shaqee Arrays

Django gudaheeda, arraysku waa hab ku habboon oo lagu kaydiyo qiyamka kala duwan ee doorsoome keliya. Arraysyada waxaa loo tixgalin karaa oo loo heli karaa si la mid ah liisaska Python caadiga ah, taasoo ka dhigaysa qaab-dhismeedka xogta ugu habboon ee codsiyada yar iyo kuwa dhexdhexaadka ah.

Si aad u abuurto array gudaha Django, isticmaal shaqada array():

my_array = array (1, 2, 3)

Si aad u gasho walxaha gaarka ah ee array, isticmaal index() shaqada:

daabac (my_array[0])
daabacado 1 . Si aad dib ugu soo celiso walxaha array, isticmaal loop-ka:

aniga oo ku jira my_array: print(i)

La shaqee taariikhaha

Django gudaheeda, waxaad isticmaali kartaa shaqada_with() shaqada si aad u maamusho taariikhaha. Shaqadani waxay qaadataa laba doodood: shay taariikhi ah iyo shay shaqo. Taariikhdu waxay ka dhigan tahay taariikhda ay tahay in shaqadu bilowdo, shayga shaqaduna wuxuu u taagan yahay hawsha aad rabto inaad qabato taariikhdaas.

Tusaale ahaan, waxaad isticmaali kartaa work_with() si aad hawl u abuurto berrito:

work_with(taariikhda('beri'), hawl('abuur cusub blog post'))

Hoteellada ku yaal Django

Iskudubbarid ku taal Django waa shay ururin. Arraysyada waxaa lagu tilmaansadaa laga bilaabo 0, markaa array leh shan walxood ayaa loo tixdisiinayaa sida 0, 1, 2, 3, 4.

Si aad u gasho curiyaha ugu horreeya ee array, isticmaal index 0. Si aad u gasho curiyaha u dambeeya ee array, isticmaal index (n-1). Si aad u gasho shay kasta oo kale oo ku jira array, isticmaal index n.

Related posts:

Leave a Comment