An warware: django tsararrun kwanakin

Babban matsala tare da tsararrun kwanakin shine cewa suna iya yin wahalar aiki dasu. Tsare-tsaren kwanan wata tarin kwanakin ne kawai, don haka yana iya zama da wahala a iya sarrafa su.

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(kwanakina__ya ƙunshi=kwana) # baya aiki!

MyModel.objects.extra(zabi = {'my_dates': "Zabi * DAGA_kwanakina INA_dates = %s"}, zaži_params=(kwanan wata,))

Yi aiki tare da Arrays

A Django, tsararraki hanya ce mai dacewa don adana ƙima mai yawa a cikin madaidaicin guda ɗaya. Ana iya ƙididdige tsararraki da samun dama ta hanya ɗaya da lissafin Python na yau da kullun, yana mai da su ingantaccen tsarin bayanai don ƙanana zuwa aikace-aikace masu matsakaici.

Don ƙirƙirar tsararru a cikin Django, yi amfani da aikin tsararru():

my_array = tsararru (1, 2, 3)

Don samun dama ga abubuwa ɗaya ɗaya na tsararrun, yi amfani da aikin index():

buga(my_array[0])
bugu 1 . Don tantance abubuwan da ke cikin tsararru, yi amfani da madauki:

don i in my_array: print(i)

Yi aiki tare da kwanan wata

A Django, zaku iya amfani da aikin work_with() don sarrafa kwanakin. Wannan aikin yana ɗaukar gardama biyu: abu na kwanan wata da abu na aiki. Abun kwanan wata yana wakiltar ranar da aikin ya kamata ya fara, kuma abin aikin yana wakiltar aikin da kake son yi a wannan ranar.

Misali, zaku iya amfani da work_with() don ƙirƙirar ɗawainiya don gobe:

work_with (kwanan wata ('gobe'), ɗawainiya ('ƙirƙirar sabon shafin yanar gizo'))

Zaune a Django

Tsari a Django tarin abubuwa ne. Ana lissafin tsararraki farawa daga 0, don haka za a yi lissafin tsararru mai abubuwa biyar a matsayin 0, 1, 2, 3, 4.

Don samun damar kashi na farko a cikin tsararru, yi amfani da fihirisar 0. Don samun damar kashi na ƙarshe a cikin tsararru, yi amfani da fihirisa (n-1). Don samun dama ga kowane abu a cikin tsararru, yi amfani da fihirisar n.

Shafi posts:

Leave a Comment